我在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:首先在这里定义
抱歉我的英语不好。
答案 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)
我还没有尝试过我的答案,但是:
然后,您的代码应如下所示:
#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(){
}
}