1

ここに投稿されたいくつかの質問を見てきましたが、このコードで問題を見つけることができません:

template <typename ItemType>
class List
{
  public:
    List(); 
  private:
    template <typename ItemType>
    struct Node
    {
      ItemType m_value;
      int      m_count;
      Node*    m_next;
      Node*    m_prev;
    };
    Node* m_head;
    int   m_uniqueSize;
    int   m_size;
    Node* find(const ItemType& value) const;
};

次に、cpp ファイルで、find 関数を次のように宣言します。

template <typename ItemType>
typename Multiset<ItemType>::Node* Multiset<ItemType>::find(const ItemType& value) const
{
   //linear search code in here
}

私のコードに何か問題がありますか? どうも

4

2 に答える 2

2

問題は、ファイル内にテンプレート実装コードを挿入していること.cppです。すべてのテンプレートコードはヘッダーMyClass.hファイルに含まれている必要があります(インターフェイスコードをファイルに、実装コードをファイルに入れたい場合がありMyClass-inl.hますが、両方ともヘッダーファイルである必要があります)。

さらに、 「。cpp」コードを記述しましたが、最初の「ヘッダー」コード(クラスの名前は)によると、の代わりにMultiset使用する必要があると思います。ListMultisetList

于 2013-03-02T22:32:55.653 に答える
0

なぜこれがテンプレートの場合に当てはまるのかをもう少し詳しく説明するために、それらがコンパイル時に評価されることを考慮してください。したがって、インライン関数や typedef などと同様に、リンカが作動する前にそれらの型を認識しておく必要があります。

于 2013-03-03T00:21:54.320 に答える