Qt c++ -未定义的参考…内联QImage自定义函数

Qt C++ - undefined reference to ... inline QImage custom function

本文关键字:内联 QImage 自定义函数 参考 c++ 未定义 Qt      更新时间:2023-10-16

在我的应用程序中,有几个函数我需要在不同的线程中在不同的时间使用,我不想到处复制粘贴它们。

所以我做了一个commonfunctions.cpp和一个commonfunctions.h,并把它们包括在不同的地方。然而,有一个功能(众多功能中的一个)拒绝工作。

错误:

undefined reference to `CommonFunctions::cvMatToQImage(cv::Mat const&)'

commonfunctions.cpp中有这样一个函数:

inline QImage CommonFunctions::cvMatToQImage(const cv::Mat &inMat) {
    (....)
}

commonfunctions.h

#ifndef COMMONFUNCTIONS
#define COMMONFUNCTIONS
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include "opencv/cv.h"
#include "opencv/highgui.h"
class CommonFunctions
{
public slots:
    inline QImage cvMatToQImage(const cv::Mat &inMat);
    void morphImage(cv::Mat threshold);
    void detectingMarkers(cv::Mat threshold, cv::Mat frame, cv::Mat roi,
                          int markerSizeMin, int markerSizeMax, int markerNumber,
                          int roiX, int roiY, bool tracking,
                          int &liczbaZgubionych, QString &komunikat);
};
#endif // COMMONFUNCTIONS

kalibracja.cpp中的调用

QImage image(commonFunctions.cvMatToQImage(frame));

我没有忘记在kalibracja中加入#include "commonfunctions.h"CommonFunctions commonFunctions;。cpp

编译器知道它必须编译所有这些。(*。支持文件)

SOURCES += main.cpp
    mainwindow.cpp 
    kalibracja.cpp 
    guiKalibracja.cpp 
    commonfunctions.cpp 
    analiza.cpp
HEADERS  += mainwindow.h 
    kalibracja.h 
    analiza.h 
    commonfunctions.h

当我只是包含一个*.cpp文件它工作,但a)这不是一个很好的方式来做事情,我认为,和b)不会让我在不同的线程中包含函数。

是什么导致了这个错误?调用有问题的函数的正确方法是什么?

我不认为你可以在.cpp文件中声明内联成员函数。摘自另一个答案:

注意:函数的定义({…}之间的部分)必须放在头文件中,除非该函数仅在单个.cpp文件中使用。特别是,如果您将内联函数的定义放入.cpp文件中,并从其他.cpp文件中调用它,则将从链接器获得"未解析的外部"错误。

您需要编译 kalibracja.cppcommonfunctions.cpp,然后将它们链接在一起。