2017-06-06 2 views
0

Ich fummle mit der QFileSystemWatcher, nach this example. Aber beim Kompilieren bekomme ich einen ungelösten externen Symbolfehler. Hier ist mein Code:QFileSystemWatcher nicht aufgelöst extern

#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(); 
} 

, die auf Erträge die folgenden Fehlermeldungen kompilieren:

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

Was mache ich falsch?

+0

Können Sie die Fehlermeldung geben zu platzieren? Welche Funktion kann nicht gelöst werden? –

+2

Sie haben 'MyClass :: MyClass (Klasse QObject *)' nicht implementiert. –

+0

Ich habe den Konstruktor implementiert (siehe Bearbeiten), bekomme aber trotzdem Fehler. Habe ich falsch umgesetzt? – DenverCoder21

Antwort

1

Try MyClass Definition in einer separaten Datei .h

+0

Wie würde das helfen? Soweit ich weiß, würde das # include der .h-Datei einfach den Inhalt der .h-Datei in die main.cpp kopieren. – DenverCoder21

+0

Es würde helfen, weil Moc es braucht. Sonst müssen Sie es am Ende Ihres Codes manuell einfügen, so etwas wie: _ # include "filename.moc" _ – Zlatomir

+0

Das funktioniert wirklich, danke! Könnten Sie erläutern, warum dies für Moc benötigt wird oder einen Link bereitstellen, damit ich ein besseres Verständnis bekommen kann? – DenverCoder21