0

クラスでのテンプレートの設定に関する多くのリンクを読んだ後、この厄介なコンパイラ エラーが発生しました。

Linking...
main.obj : error LNK2019: unresolved external symbol "public: __thiscall test<int,int>::test<int,int>(int)" (??0?$test@HH@@QAE@H@Z) referenced in function _main
fatal error LNK1120: 1 unresolved externals

問題のあるコードは、できるだけ単純に次のとおりです。

test.h

template<typename U, typename V>
class test {
public:
    test(int number);
};

test.cpp

#include "test.h"

template<typename T, typename U>
test<T, U>::test(int number){}

main.cpp

#include "test.h"

void main() {
    test<int, int> a = test<int, int>(4);
}

明らかに、前のコードは何の役にも立たず、プロジェクトを開始するためのテンプレートのモデルを構築しているだけです。自分自身を正しく構築できるテンプレート化されたクラスを持つという目的を満たすために、このソリューションを構造化することについて私が理解していないことを誰かが説明できますか?

4

3 に答える 3

0

実装をヘッダーに移動します。

于 2013-10-15T16:44:49.650 に答える
0

テンプレートの動作方法により、実装は別の .cpp ファイルではなく、ヘッダー ファイルに含める必要があります。したがって、これが必要です:

template<typename U, typename V>
class test {
public:
    test(int number)
    {
    }
};
于 2013-10-15T16:46:06.840 に答える
0

実装をヘッダーに移動するだけでなく、別のファイルでのリンク テンプレートの定義と宣言で、質問に示されているトリックを使用することもできます。

于 2013-10-15T16:53:54.647 に答える