2017-06-06 17 views
0

私はQFileSystemWatcherで回り、this exampleに続いています。しかしコンパイルすると、未解決の外部シンボルエラーが発生します。ここ は私のコードです:QFileSystemWatcher未解決外部

#include <QCoreApplication> 
#include <QFileSystemWatcher> 
#include <QObject> 

#include <iostream> 

class MyClass : public QObject 
{ 
    Q_OBJECT 

public: 
    MyClass(QObject* parent = nullptr) : QObject(parent){} 

public slots: 
    void on_dir_change(const QString& path) 
    { 
     std::cout << "folder modified: (" << path.toStdString() << ")" << 
std::endl; 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    QFileSystemWatcher watcher; 
    watcher.addPath("C:/test"); 

    MyClass* mc = new MyClass(); 

    QObject::connect(&watcher, SIGNAL(directoryChanged(QString)), mc, 
SLOT(on_dir_change(QString))); 

    return a.exec(); 
} 

どの次のエラーメッセージ利回りをコンパイルするには:

main.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl MyClass::metaObject(void)const " ([email protected]@@[email protected]@XZ)

main.obj : error LNK2001: unresolved external symbol "public: virtual void * __cdecl MyClass::qt_metacast(char const *)" ([email protected]@@[email protected])

main.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl MyClass::qt_metacall(enum QMetaObject::Call,int,void * *)" ([email protected]@@[email protected]@@[email protected])

debug\FileSystemWatcherTest.exe : fatal error LNK1120: 3 unresolved externals

私は間違って何をしていますか?

+0

エラーメッセージを表示できますか?どの機能を解決できないのですか? –

+2

あなたは 'MyClass :: MyClass(クラスQObject *)'を実装していません。 –

+0

私はコンストラクタを実装しましたが(edit参照)、それでもエラーが発生します。私は間違って実装しましたか? – DenverCoder21

答えて

1

MyClass定義を別の.hファイルに配置してください。

+0

これはどのように役立ちますか?私が理解するように、.hファイルの#includeは.hファイルの内容をmain.cppにコピーするだけです。 – DenverCoder21

+0

これはmocが必要とするので役立ちます。それ以外の場合は、コードの最後に手動でインクルードする必要があります。_#include "filename.moc" _ – Zlatomir

+0

これは実際に動作します、ありがとうございます!なぜこれがmocに必要なのかを詳しく説明したり、リンクを提供してより良い理解を得ることができますか? – DenverCoder21