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文件中,但两者都必须是头文件)。

此外,您Multiset在“.cpp”代码中编写了,但我认为您应该根据您的第一个“标题”代码(类的名称是)使用List代替。MultisetList

于 2013-03-02T22:32:55.653 回答
0

为了进一步说明为什么模板会出现这种情况,请考虑在编译时对它们进行评估。因此,在链接器启动之前必须知道它们的类型,类似于内联函数、typedef 等。

于 2013-03-03T00:21:54.320 回答