Ich habe eine Qt-Anwendung mit mehreren Klassen, die Signale und Slots verwenden und es kompiliert gut. Wenn ich jedoch eine benutzerdefinierte Klasse in der Haupt-CPP-Datei (main.cpp) erstelle, erhalte ich einen Linker-Fehler. HierLinker-Fehler mit Qt Signal/Slot Beispiel
ist der Code, den ich verwenden:
class Counter : public QObject
{
Q_OBJECT
public:
Counter() { m_value = 0; }
int value() const { return m_value; }
public slots:
void setValue(int value)
{
if(value!=m_value)
{
m_value = value;
qDebug() << "Value " << value;
emit valueChanged(value);
}
}
signals:
void valueChanged(int newValue);
private:
int m_value;
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
Counter a, b;
QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));
a.setValue(12); // a.value() == 12, b.value() == 12
b.setValue(48); // a.value() == 12, b.value() == 48
QTimer::singleShot(0, &app, SLOT(quit()));
return app.exec();
}
Hier sind die Fehler:
Error 4 error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Counter::metaObject(void)const " ([email protected]@@[email protected]@XZ)
Error 5 error LNK2001: unresolved external symbol "public: virtual void * __thiscall Counter::qt_metacast(char const *)" ([email protected]@@[email protected])
Error 6 error LNK2001: unresolved external symbol "public: virtual int __thiscall Counter::qt_metacall(enum QMetaObject::Call,int,void * *)" ([email protected]@@[email protected]@@[email protected])
Error 7 error LNK2019: unresolved external symbol "protected: void __thiscall Counter::valueChanged(int)" ([email protected]@@[email protected]) referenced in function "public: void __thiscall Counter::setValue(int)" ([email protected]@@[email protected])
Dieser Linker Fehler tritt nicht auf, wenn ich den Zähler in einem separaten Header-Datei platzieren. Was ist der Grund für dieses Verhalten?