模板实现中的错误(嵌套类)

时间:2013-03-02 22:29:23

标签: c++ templates

我一直在寻找这里发布的一些问题,但我仍然找不到这个代码的问题:

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
}

我的代码有什么问题吗? THX

2 个答案:

答案 0 :(得分:2)

问题是您在.cpp文件中插入模板实现代码:所有模板代码必须位于 header 文件中(您可能希望将接口代码放在{{1}中文件和实现代码在MyClass.h文件中,但两者都必须是头文件。)

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

答案 1 :(得分:0)

为了进一步详细说明模板的原因,请考虑在编译时对它们进行评估。因此,在链接器启动之前必须知道它们的类型,类似于内联函数,typedef等。