我试图编写一个像这样简单的 Qt 应用程序:
当我尝试使用Qt Creator 2.3.1(Qt 4.7.4)编译和链接它时,我遇到了3个“未解析的外部符号”错误:
- main.obj:-1: 错误:LNK2001: 无法解析的外部符号“public: virtual struct QMetaObject const * __thiscall MyApp::metaObject(void)const ”(?metaObject@MyApp@@UBEPBUQMetaObject@@XZ)。 - main.obj:-1: 错误:LNK2001: 无法解析的外部符号“public: virtual void * __thiscall MyApp::qt_metacast(char const*)”(?qt_metacast@MyApp@@UAEPAXPBD@Z)。 - main.obj:-1: 错误:LNK2001: 无法解析的外部符号“public: virtual int __thiscall MyApp::qt_metacall(enum QMetaObject::Call,int,void * *)”(?qt_metacall@MyApp@@UAEHW4Call@QMetaObject@@HPAPAX@Z)。
我认为它们与Qt的MetaObjectCompiler有关,但我无法找到解决方案。我知道在C ++中将声明和定义放在一个文件中不被认为是良好的编程风格,但这不是问题的关键。在我看来,应该是可能的,因为从语法上讲并没有什么错误。
main.cpp:
#include <QApplication>
class MyApp : public QApplication {
Q_OBJECT
public:
MyApp(int argc, char* argv[]);
};
MyApp::MyApp(int argc, char* argv[]) :
QApplication(argc,argv) {
}
int main(int argc, char* argv[]) {
MyApp app(argc,argv);
return app.exec();
}
当我尝试使用Qt Creator 2.3.1(Qt 4.7.4)编译和链接它时,我遇到了3个“未解析的外部符号”错误:
- main.obj:-1: 错误:LNK2001: 无法解析的外部符号“public: virtual struct QMetaObject const * __thiscall MyApp::metaObject(void)const ”(?metaObject@MyApp@@UBEPBUQMetaObject@@XZ)。 - main.obj:-1: 错误:LNK2001: 无法解析的外部符号“public: virtual void * __thiscall MyApp::qt_metacast(char const*)”(?qt_metacast@MyApp@@UAEPAXPBD@Z)。 - main.obj:-1: 错误:LNK2001: 无法解析的外部符号“public: virtual int __thiscall MyApp::qt_metacall(enum QMetaObject::Call,int,void * *)”(?qt_metacall@MyApp@@UAEHW4Call@QMetaObject@@HPAPAX@Z)。
我认为它们与Qt的MetaObjectCompiler有关,但我无法找到解决方案。我知道在C ++中将声明和定义放在一个文件中不被认为是良好的编程风格,但这不是问题的关键。在我看来,应该是可能的,因为从语法上讲并没有什么错误。