我有一个函数可以从一个图像表示 ( MyImage
) 转换为 a QImage
,我决定将命名空间专用于以这种方式接口的函数会更整洁。我以前直接在代表我的类中使用此函数 main QMainWindow
。
因此,我创建了一个文件MyFormatToQtInterfacing.h
,如下所示:
#include <QtGui/QMainWindow>
#include <qlabel.h>
namespace MyFormatToQtInterfacing
{
// These functions below convert a cv::Mat to a QImage.
// Adapted from http://stackoverflow.com/questions/5026965/how-to-convert-an-opencv-cvmat-to-qimage
// The grayscale ones seem to be inverted. Look into this later.
QImage MyImage2QImage(const MyImage &src) { //snip };
};
然后我从这个新的命名空间调用函数,正如你所期望的那样,我得到以下链接器错误:
1>main.obj : 错误 LNK2005: "class QImage _ cdecl MyFormatToQtInterfacing::Mat2QImage(class MyImage2QImage const &)" (?MyImage2QImage@MyFormatToQtInterfacing@@YA?AVQImage@@ABV?$Mat @V?$Vec@E$02@ cv@@@cv@@@Z) 已经在 moc_Tracker.obj 中定义
1>Tracker.obj : 错误 LNK2005: "class QImage _ cdecl MyFormatToQtInterfacing::MyImage2QImage(class MyImage2QImage const &)" (?MyImage2QImage@MyFormatToQtInterfacing@@YA?AVQImage@@ABV?$Mat @V?$Vec@E$02@ cv@@@cv@@@Z) 已经在 moc_Tracker.obj 中定义
1>C:\Projects\Tracker\Tracker.exe : 致命错误 LNK1169: 找到一个或多个多重定义符号
我也一直在用 OpenCV 矩阵替换 MyImage 并遇到同样的问题。为什么会发生这种情况,我该如何解决?