gpt4 book ai didi

c++ - 使用 Qt 插件将函数移动到 VS2010 中的不同文件时出现链接器错误

转载 作者:行者123 更新时间:2023-11-28 00:57:22 24 4
gpt4 key购买 nike

我有一个函数可以将一个图像表示 (MyImage) 转换为一个 QImage,我决定将命名空间专用于接口(interface)中的函数会更整洁这种方式。我以前直接在代表我的主要 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 : error LNK2005: "class QImage _cdecl MyFormatToQtInterfacing::Mat2QImage(class MyImage2QImage const &)" (?MyImage2QImage@MyFormatToQtInterfacing@@YA?AVQImage@@ABV?$Mat@V?$Vec@E$02@cv@@@cv@@@Z) already defined in moc_Tracker.obj

1>Tracker.obj : error LNK2005: "class QImage _cdecl MyFormatToQtInterfacing::MyImage2QImage(class MyImage2QImage const &)" (?MyImage2QImage@MyFormatToQtInterfacing@@YA?AVQImage@@ABV?$Mat@V?$Vec@E$02@cv@@@cv@@@Z) already defined in moc_Tracker.obj

1>C:\Projects\Tracker\Tracker.exe : fatal error LNK1169: one or more multiply defined symbols found

我也一直在用 OpenCV 矩阵代替 MyImage 并遇到同样的问题。为什么会发生这种情况,我该如何解决?

最佳答案

您违反了单一定义规则。不允许在包含在多个编译单元中的 header 中定义非内联或非模板函数。将您的定义移动到 .cpp 文件或将函数标记为内联。

关于c++ - 使用 Qt 插件将函数移动到 VS2010 中的不同文件时出现链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10402196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com