2016-05-16 10 views
0

私は単純なC++ Qtプログラムを持っています。プライベートスロットを使用するとは未定義の参照になります。誰でも助けてくれますか?qtプライベートスロットmoc未定義参照エラー

書籍C++ GUI Programming with Qt4からQt5を使用してGUIデザインを学習しています。私はWindowsMinGWコンパイラでcmakeを使用しています。

ただし、ヘッダファイルからQ_OBJECTをコメントアウトすると、エラーなしでコンパイルされます。

これはヘッダーファイルです。

#ifndef MYWIDGETS_H 
#define MYWIDGETS_H 

#include <QDialog> 


class mywidgets : public QDialog 
{ 
    Q_OBJECT 
public: 

    mywidgets(); 
    void myDemoWidgets(); 
    void mySecondDemoWidgets(); 
private: 
    void findLayout(); 

private slots: 
    //void findClicked(); 
    void enableFindButton(const QString &text); 

signals: 
    void findNext(const QString &str, Qt::CaseSensitivity cs); 
    void findPrevious(const QString &str, Qt::CaseSensitivity cs); 
}; 

#endif // MYWIDGETS_H 

これはエラーです:

myClass_automoc.cpp:-1: error: undefined reference to mywidgets::enableFindButton(QString const&) 
+0

あなたは、ボイドmywidgets 'として.cpp'ファイル'で '無効enableFindButton(のconst QStringの&text);'を宣言しなかったあなたは、私たちに実装( '.cpp')ファイルを表示することができます:: enableFindButton(のconst QStringの&テキスト){}' – KernelPanic

+0

@KernelPanic スロット関数はconnect()関数で使用されます 'connect(lineLayout、SIGNAL(textChanged(const QString& )、これ、SLOT(enableFindButton(const QString &))); ' – sutradhar

+0

)コメントではなく、質問に追加情報を追加してください –

答えて

0

未定義参照エラーでした。実装はここで与えられます。 void mywidgets::enableFindButton(const QString &text){ findButton->setEnabled(!text.isEmpty()); }

0

は、あなたが開始するために
void mywidgets::enableFindButton(const QString &text) { }
としてvoid enableFindButton(const QString &text);.cppでファイルを宣言しなかった、私たちの実装(.cpp)ファイルを表示することができます。一旦エラーを取り除くと、スロットの本体の中にコードを置くことができます。私は(.cpp)ファイルにvoid mywidgets::enableFindButton(const QString &text) { }関数を定義していなかったので、