Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Q在moc文件上创建多个定义_C++_Qt_Qmake - Fatal编程技术网

C++ Q在moc文件上创建多个定义

C++ Q在moc文件上创建多个定义,c++,qt,qmake,C++,Qt,Qmake,我在QT中有太多的定义。对于普通类,在我的整个库中,我只是将实现和头放在同一个hpp文件中。 我正在尝试转换QObject中的一个普通类,因此我可以将其用作与其他QThread连接的工作线程。在我将类转换为QObject之后,我遇到了许多多个定义问题。假设我的类现在看起来像这样: #如果我的等级为水电站 #定义MYCLASS_水电站 #包括“common.hpp” #包括 名称空间二进制 { 班级形象; 类Myclass:QObject{ 图像*img; 信号: void mySignal()

我在QT中有太多的定义。对于普通类,在我的整个库中,我只是将实现和头放在同一个hpp文件中。 我正在尝试转换QObject中的一个普通类,因此我可以将其用作与其他QThread连接的工作线程。在我将类转换为QObject之后,我遇到了许多多个定义问题。假设我的类现在看起来像这样:

#如果我的等级为水电站
#定义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(){
    
    }
    }