C++ Q在moc文件上创建多个定义
我在QT中有太多的定义。对于普通类,在我的整个库中,我只是将实现和头放在同一个hpp文件中。 我正在尝试转换QObject中的一个普通类,因此我可以将其用作与其他QThread连接的工作线程。在我将类转换为QObject之后,我遇到了许多多个定义问题。假设我的类现在看起来像这样:C++ Q在moc文件上创建多个定义,c++,qt,qmake,C++,Qt,Qmake,我在QT中有太多的定义。对于普通类,在我的整个库中,我只是将实现和头放在同一个hpp文件中。 我正在尝试转换QObject中的一个普通类,因此我可以将其用作与其他QThread连接的工作线程。在我将类转换为QObject之后,我遇到了许多多个定义问题。假设我的类现在看起来像这样: #如果我的等级为水电站 #定义MYCLASS_水电站 #包括“common.hpp” #包括 名称空间二进制 { 班级形象; 类Myclass:QObject{ 图像*img; 信号: void mySignal()
#如果我的等级为水电站
#定义MYCLASS_水电站
#包括“common.hpp”
#包括
名称空间二进制
{
班级形象;
类Myclass:QObject{
图像*img;
信号:
void mySignal();
公众:
无效f();
}
#包括“Image.hpp”
名称空间二进制{
void Myclass::f(){
}
}
#endif//MYCLASS_水电站
MyClass是Platfinder类的简化版。Thai太大,无法放在这里;
这个问题出现在这个类的moc_platfinder.o文件中,在我整个库的许多函数中都有。总共有289个多定义问题:
mainwindow.o:/home/lellis/Dropbox/lellis_Diet/bin/。/Diet/inc/。/bial/File.hpp:1677:首先在这里定义
对不起,我的英语不好。你不应该在这里加上'Q_OBJECT'():
类Myclass:QObject{
Q_OBJECT/我还没有尝试我的答案,但是:
#include QObject毫无意义;您可以使用#include
在QObject派生的类中,必须在其定义中添加一个Q_对象宏
#endif出现在错误的位置
然后,您的代码应该如下所示:
#ifndef MYCLASS_HPP
#define MYCLASS_HPP
#include "common.hpp"
#include <QtGui>
namespace Bial
{
class Image;
class Myclass : QObject{
Q_OBJECT
Image *img;
signal:
void mySignal();
public:
void f();
}
#endif //MYCLASS_HPP
#include "Image.hpp"
namespace Bial{
void Myclass::f(){
}
}
#如果我的等级为水电站
#定义MYCLASS_水电站
#包括“common.hpp”
#包括
名称空间二进制
{
班级形象;
类Myclass:QObject{
Q_对象
图像*img;
信号:
void mySignal();
公众:
无效f();
}
#endif//MYCLASS_水电站
#包括“Image.hpp”
名称空间二进制{
void Myclass::f(){
}
}
抱歉,我试图简化类以提出问题,但忘记了包含Q_OBJECT标记。该类的许多名为Platfinder的成员类都出现了多重定义问题,但在许多其他类中也出现了。我有289个类似的多重定义问题:/I曾经遇到过同样的问题,我想我必须重新编译t他有一个项目(对此不确定).Edit:看看Edit我的问题不一样,我知道这个信号是在moc文件中实现的。我正在寻找一种方法来编译这个程序,而不让这个289函数内联。不幸的是,我现在必须这样做。寻求帮助:)我现在试着这样做,但没有成功。我试图简化我的类来完成这个问题上,但忘记在MyClass标头中添加Q#u OBJECT标记。由于标头和实现位于同一文件中,因此#endif标记位于末尾,并且在所有其他类中都可以正常工作。即使更改#endif标记位置,包括qtGUI,我也遇到了相同的问题。moc创建moc#u platfinder.cpp文件后,QT编译器显示了289 mu多定义问题。
class Myclass : QObject{
Q_OBJECT // <-- here
signal:
void mySignal();
public:
void f();
Image *img;
#ifndef MYCLASS_HPP
#define MYCLASS_HPP
#include "common.hpp"
#include <QtGui>
namespace Bial
{
class Image;
class Myclass : QObject{
Q_OBJECT
Image *img;
signal:
void mySignal();
public:
void f();
}
#endif //MYCLASS_HPP
#include "Image.hpp"
namespace Bial{
void Myclass::f(){
}
}