2011-12-15 104 views
3

這讓我瘋狂....它工作得更早,但不是它不工作。我已經定義了Q_SLOTS和Q_SIGNALS,並且正在嘗試連接它們。它在一定程度上工作......然後突然一切都停止了,現在我正在犯錯。我的代碼如下:QT信號和插槽意外錯誤

ControllerLogic.h

#ifndef CONTROLLERLOGIC_H 
#define CONTROLLERLOGIC_H 

#include "initdataaccess.h" 
#include "mainframe.h" 
#include <QtGui> 
#include "initializationdatastructure.h" 


/** This is a controller class; refering to the model-view-controller 
* architecture. 
*/ 

class ControllerLogic : public QObject 
{ 
    Q_OBJECT 
public: 
    ControllerLogic(InitDataAccess *initDataAccess, MainFrame *mainFrame); 

Q_SIGNALS: 
    void Signal(); 

private: 
    void setMainFrame(MainFrame mainFrame); 

public Q_SLOTS: 
    void receive(); 

}; 

#endif // CONTROLLERLOGIC_H 

ControllerLogic.cpp

#include "controllerlogic.h" 
#include "licensedataaccess.h" 
#include <qobjectdefs.h> 

// obsolete...may be used later 

ControllerLogic::ControllerLogic(InitDataAccess *initDataAccess, MainFrame *mainFrame) 
{ 
    connect(this, SIGNAL(signal()), mainFrame, SLOT(PrintTestSlot())); 
} 

void ControllerLogic::receive(){ 
    qDebug()<<"RECEIVE"; 
} 

void ControllerLogic::Signal(){ 
    qDebug()<<"SIGNAL"; 
} 

錯誤

moc_controllerlogic.obj:-1: error: LNK2005: "protected: void __thiscall ControllerLogic::Signal(void)" ([email protected]@@IAEXXZ) already defined in controllerlogic.obj 

release\TSLSuite.exe:-1: error: LNK1169: one or more multiply defined symbols found 

我也嘗試定義信號如下:

public: 
Q_SIGNAL void Signal(); 

但我得到了同樣的錯誤。

這是怎麼回事? 請幫忙!

謝謝!

回答

7

的問題是,你要定義一個名爲Signal()

的Qt函數生成的「信號」功能身體給你,如果你嘗試創建自己的定義,你會得到錯誤你正在描述。

(作爲一個方面說明,你的連接語句似乎被打破s/signal/Signal/

+0

好吧,以及我怎麼能確定我在想的信號做,如果QT生成我的功能? – PTBG 2011-12-15 22:58:34