QMake文件上有多个定义

时间:2014-04-20 18:41:13

标签: c++ qt qmake

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

#ifndef MYCLASS_HPP
#define MYCLASS_HPP
#include "common.hpp"
#include <qtGui>
namespace Bial
{
class Image;

class Myclass : QObject{
    Image *img;
signal:
    void mySignal();
public:
    void f();
}

#include "Image.hpp"
namespace Bial{
void Myclass::f(){

}
}
#endif //MYCLASS_HPP

MyClass是Platefinder类的简化。泰国太大了,不能放在这里; 在我的整个库的许多函数中,此类问题的moc_platefinder.o文件中出现此问题。共计289个多个定义问题:

mainwindow.o:/ home / lellis / Dropbox / Lellis_Diet / bin /../ diet / inc /../ bial / File.hpp:1677:首先在这里定义

Entire compiler output

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

你不应该在这里包括Q_OBJECT&#39;(http://qt-project.org/doc/qt-4.8/signalsandslots.html)吗? :

class Myclass : QObject{

Q_OBJECT // <-- here

signal:
    void mySignal();
public:
    void f();
    Image *img;

}

编辑:一般&#39;多个定义......&#39;可以使用&#39;静态&#39; (即&#39; static void f()&#39;)

编辑:你看到了吗? Multiple definitions error: one in my file and one in the moc file.

答案 1 :(得分:0)

我还没有尝试过我的答案,但是:

  1. #include QObject毫无意义;你可以改用#include;
  2. 在由QObject派生的类中,您必须在其定义中添加Q_OBJECT宏;
  3. #endif出现在错误的位置;
  4. 然后,您的代码应如下所示:

    #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(){
    
    }
    }