2012年5月30日水曜日

C++のテンプレートのリンクエラー対策

C++のテンプレートでこのような定義MyQueue.hと実装MyQueue.cppが分離しているクラスを
書いている時、テストコードをMyQueue.cppに含めています。
この場合はテストコードがどのような型でクラスを作ればいいのかわかるのでリンクエラーにはなりません。

しかし、他のファイルmain.cppからMyQueueクラスを使おうとするとリンクエラーになります。
" Undefined symbol MyQueue<char>::MyQueue(char) (referred from main.cpp.LPC1768.o)." in file "/"
" Undefined symbol MyQueue<int>::MyQueue(int) (referred from main.cpp.LPC1768.o)." in file "/"

対策としてはMyQueue.cppでこのようにインスタンス化すればいいらしい。
template class MyQueue<int>;
template class MyQueue<char>;
---

0 件のコメント: