2017-06-06 64 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(class QObject *)'。 –

+0

我實現了構造函數(請參閱編輯),但仍然出錯。我執行錯了嗎? – DenverCoder21

回答

1

嘗試將MyClass定義放置在單獨的.h文件中

+0

這會有幫助嗎?據我所知,.h文件的#include只會將.h文件的內容複製到main.cpp中。 – DenverCoder21

+0

這將有助於,因爲moc需要它。否則,您需要在代碼的末尾手動包含它,例如:_#include「filename.moc」_ – Zlatomir

+0

這真的起作用,謝謝!你能否詳細說明爲什麼需要moc或提供鏈接以便我可以更好地理解? – DenverCoder21