Qt C ++ - 未定义引用...内联QImage自定义函数

时间:2015-06-02 10:23:35

标签: c++ qt include

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

所以我制作了commonfunctions.cppcommonfunctions.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.cpp中#include "commonfunctions.h"CommonFunctions commonFunctions;

编译器知道必须编译所有这些。 (* .pro文件)

SOURCES += main.cpp\
    mainwindow.cpp \
    kalibracja.cpp \
    guiKalibracja.cpp \
    commonfunctions.cpp \
    analiza.cpp

HEADERS  += mainwindow.h \
    kalibracja.h \
    analiza.h \
    commonfunctions.h

当我简单地包含一个* .cpp文件时它起作用,但是a)这不是一个很好的做事方式,Ithink,和b)不会让我将函数包含在不同的线程中。

可能导致此错误的原因是什么?调用相关函数的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

我认为您不能在.cpp个文件中声明内联成员函数。取自this

  

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

答案 1 :(得分:0)

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