2017-02-13 32 views
0
私はオープンソースプロジェクトに取り組んでいます

:/ ArrayHolder.cppC++リンク未定義参照

私のコードはコンパイル

を保有/ ArrayHolder.hで定義され、ホルダーに実装さhttps://github.com/daniftodi/metal

私が持っているArrayHolderクラス。しかし、私のmain.cppで;私はする必要があります:

#include "holders/ArrayHolder.cpp" 

私はそれをしないでください。このエラーが表示されます:

main.cpp.o:(.rodata._ZTV11ArrayHolderI8FunctionE[_ZTV11ArrayHolderI8FunctionE]+0x10): undefined reference to `ArrayHolder<Function>::put(Function*) 

解決できない問題があります。私を助けてください。

+1

はmain.cppにヘッダファイルをインクルードしてリンクするときに、あなたのcppファイル – matesc

+1

をリンクするようにコンパイラに伝えるには、あなたの問題が何であるかを詳細にもう少し行くことができますか?たぶんCMakeコードですか? 「もしArrayHolder.cppが含まれていなければ...リンカのエラーが出ます」というのはかなり明らかです。ちょうど推測です:あなたはライブラリを構築していて、['target_link_libraries()'](https://cmake.org/cmake/help/latest/command/target_link_libraries.html)コマンドで 'main'にリンクするのを忘れていますか? – Florian

+0

ここにCMakeListファイルがあります:https://github.com/daniftodi/metal/blob/master/CMakeLists.txt – daniftodi

答えて

1

テンプレートを使用する場合は、 ヘッダーファイルに定義する必要があります。通常の方法や機能の場合と同様に、ソースファイルでは定義できません。

さらに参考のために、この質問を参照してください:Why can templates only be implemented in the header file?

+0

ありがとうございます。私はここでも役に立つ説明を見つけました:https://www.codeproject.com/Articles/48575/How-to-define-a-template-class-in-a-h-file-and-imp – daniftodi