需要のないページ

プログラミングや趣味や。

qt_metacallのリンクエラーを解消した(い)

追記:2017/03/21

内容に誤りが多かったため、大幅に修正しました。

 

発生した問題

Visual studioにQtをアドインで入れてみた。

 

QtのQObjectクラスを継承したクラスを作るときは、

Q_OBJECTマクロをヘッダに記載しなければならない。

 

でも、いざコンパイルしてみると...

error LNK2001: 外部シンボル ""public: virtual int __cdecl MyObject::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MyObject@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)" は未解決です。 error LNK2001: 外部シンボル ""public: virtual void * __cdecl MyObject::qt_metacast(char const *)" (?qt_metacast@MyObject@@UEAAPEAXPEBD@Z)" は未解決です。 error LNK2001: 外部シンボル ""public: virtual struct QMetaObject const * __cdecl MyObject::metaObject(void)const " (?metaObject@MyObject@@UEBAPEBUQMetaObject@@XZ)" は未解決です。

 

いろいろ調べても、英語のページばっかりヒットする。

それっぽいlibファイルも見当たらない。

 

実はこれ、Qtの根幹技術であるMOCが働いていないせいである。

 

解決策1:ウィザードを使ってみる

louis-needless.hatenablog.com

 

解決策2:プロジェクトファイルなどを書き換える

louis-needless.hatenablog.com

 

反省

前回投稿した際は、単にQtの不具合として切り捨ててしまっていた。

あまりに知識が少なく、誤った情報を鵜呑みにしていたし...

メモ帳代わりの当ページ、私だけのために作ったページであるが、

多くの人の目に触れる以上、もっと正確な記事を書くべきであった。

 

戒めとして古い記事を残そうとも思ったが、

完全に間違った情報を野放しにするわけにもいけまい。

加筆どころか全体を修正して更新した。

/* コードブロック */