次のような単純な Qt アプリケーションを作成しようとしました。
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: 未解決の外部シンボル
""パブリック: 仮想構造体 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に何らかの関係があると思いますが、解決策がわかりません。宣言と定義を 1 つのファイルに入れることは、C++ で適切なプログラミング スタイルとは見なされないことはわかっていますが、それはここでのポイントではありません。私の意見では、ここには構文的に間違っているものは何もないので、可能であるはずです。