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:ウィザードを使ってみる
解決策2:プロジェクトファイルなどを書き換える
反省
前回投稿した際は、単にQtの不具合として切り捨ててしまっていた。
あまりに知識が少なく、誤った情報を鵜呑みにしていたし...
メモ帳代わりの当ページ、私だけのために作ったページであるが、
多くの人の目に触れる以上、もっと正確な記事を書くべきであった。
戒めとして古い記事を残そうとも思ったが、
完全に間違った情報を野放しにするわけにもいけまい。
加筆どころか全体を修正して更新した。