2016-04-01 41 views
1

私は私がちょうど上記のコードをビルドしようとするとエラーLNK2019:未解決の外部シンボル「パブリック:__thiscall

TEST_CLASS(LinkedListUnitTests) 
{ 
public: 

    TEST_METHOD(Add_to_An_Empty_Linked_List) 
    { 
     LinkedListItem<int> item(1); 
    } 
//private: 

}; 

などのユニットテストを記述しようとしています

template <class T> 
     class LinkedListItem 
     { 
     public: 
      LinkedListItem(T value); 
      LinkedListItem(const LinkedListItem<T>& rhs); 
      T getValue(void); 
      LinkedListItem<T>& getNext(void); 
      void setNext(LinkedListItem<T>& next); 
      LinkedListItem<T>& operator=(const LinkedListItem<T>& rhs); 
      ~LinkedListItem(); 
     private: 
      T _value; 
      LinkedListItem& _next; 
     }; 

のようなクラスを持っています

エラーLNK2019:未解決の外部シンボル "public:__thiscall cpp :: libraries :: datastructures :: LinkedListItem :: LinkedListItem(int)"(0〜$ LinkedListItem @ H @ datastructures @ libraries) @ cpp @@ QAE @ H @Z)関数で参照? "公共:無効__thiscall CppLibrariesTests :: LinkedListUnitTests :: Add_to_An_Empty_Linked_List(無効)"(Add_to_An_Empty_Linked_List @ LinkedListUnitTests @ CppLibrariesTests @@ QAEXXZ)

私は、興味深いことにのVisual Studioに2012

を使用しています下のようなユニットテストクラスにテンプレートを追加すると、コンパイルエラーはなくなりますが、テストは検出されず、実行できません。

template<class T> 
TEST_CLASS(LinkedListUnitTests){..} 

私は非常に愚かな何かをやっている場合、私は驚かないだろうので、長い時間の後にC++をピックアップしようとしています。誰の考え?

+2

[なぜテンプレートのみヘッダファイルに実装することができますか?]の可能な重複(http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in -the-ヘッダーファイル)。 –

答えて

1

テンプレートは、理想的にはインラインで実装する必要があります。コンパイラの2番目のパスは、実装を持つCPPファイルを再使用することはできません。または、にCPPも含めて#includeする必要があります。

Refer this article

関連する問題