QT 报错LNK2019 无法解决的外部符号

img

一个调用了外部halcon库的项目,本来自己把所有封装的函数都放在mainwindow(即qthalconmw)里,后面觉得太麻烦新建了个tools.cpp存放各类函数。
qthalconmw.h

#include"tools.h"
class qthalconmw : public QMainWindow
{
    Q_OBJECT

public:
    qthalconmw(QWidget *parent = nullptr);
    ~qthalconmw();


    tools  mytools;

qthalcon.cpp

#include "tools.h"

 mytools.FindTickFrom2(ho_ImageReduced1, ho_ImageReduced2, &ho_Regions, &(*ho_RectangleResult0),
      &hv_Row0, &hv_Column0, &hv_tuple0, &hv_result0);//调用tools里函数

tool.h


class tools : public QWidget
{
    Q_OBJECT
public:
    explicit tools(QWidget *parent = nullptr);
    ~tools();

void FindTickFrom2 (HObject ho_ImageReduced1, HObject ho_ImageReduced2, HObject *ho_Regions,
        HObject *ho_RectangleResult, HTuple *hv_Row, HTuple *hv_Column, HTuple *hv_tuple1,
        HTuple *hv_result1);

求解该怎么改

我记得上次回你了,你~tools() 的析构函数写了吗?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    根据代码内容和问题描述,可以看到是链接器无法找到tools.cpp文件中的函数定义,导致LNK2019错误。解决这个问题的方法有两种:

    方法一:正确链接tools.cpp文件

    1. 确保在项目中包含了tools.cpp文件。
    2. 在项目的.pro文件(如果是Qt项目)或者CMakeLists.txt文件(如果是CMake项目)中添加对tools.cpp文件的引用。

    对于Qt项目的.pro文件,可以添加类似以下代码:

    SOURCES += tools.cpp
    

    方法二:在tools.h文件中添加函数定义

    1. 在tools.h文件的类定义末尾添加函数的定义。
    2. 在tools.cpp文件中移除该函数的定义。

    修改后的tools.h文件内容如下:

    class tools : public QWidget
    {
        Q_OBJECT
    public:
        explicit tools(QWidget *parent = nullptr);
        ~tools();
    
        void FindTickFrom2(HObject ho_ImageReduced1, HObject ho_ImageReduced2, HObject *ho_Regions,
                HObject *ho_RectangleResult, HTuple *hv_Row, HTuple *hv_Column, HTuple *hv_tuple1,
                HTuple *hv_result1)
        {
            // 在这里添加函数的具体实现
        }
    };
    

    删掉tools.cpp文件中的函数定义。注意,如果tools.cpp文件中还有其他函数的定义,这些函数的定义也需要移到tools.h文件中。

    这两种方法中,方法一是比较常见的做法,将函数的实现代码放在cpp文件中,使项目结构更加清晰。方法二适用于只有一个cpp文件的情况,可以将函数定义直接放在头文件中以简化项目结构。根据您的项目情况选择适合的方法即可。

    请提供更多关于工程结构和编译选项的信息,以便更准确地解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^