类模板中没有成员函数声明

No member function declaration in class template

本文关键字:成员 函数 声明      更新时间:2023-10-16

我有一个名为SkipList的模板类和一个名为Iterator的嵌套类。

SkipList遵循以下定义:

template <typename Key_T, typename Mapped_T, size_t MaxLevel = 5>
class SkipList
{
  typedef std::pair<Key_T, Mapped_T> ValueType;

public:
  class Iterator
  {
      Iterator (const Iterator &);
      Iterator &operator=(const Iterator &);
      Iterator &operator++();
      Iterator operator++(int);
      Iterator &operator--();
      Iterator operator--(int);
    private:
      //some members
  };

Iterator有一个复制构造函数,我在其定义后在类外声明它,如下所示:

template <typename Key_T, typename Mapped_T,size_t MaxLevel>
SkipList<Key_T,Mapped_T,MaxLevel>::Iterator(const SkipList<Key_T,Mapped_T,MaxLevel>::Iterator &that)

但是我得到以下错误:

SkipList.cpp:134:100: error: ISO C++ forbids declaration of ‘Iterator’ with no type [-fpermissive]
SkipList.cpp:134:100: error: no ‘int SkipList<Key_T, Mapped_T, MaxLevel>::Iterator(const SkipList<Key_T, Mapped_T, MaxLevel>::Iterator&)’ member function declared in class ‘SkipList<Key_T, Mapped_T, MaxLevel>’

怎么了?

试试这个:

template <typename Key_T, typename Mapped_T,size_t MaxLevel>
SkipList<Key_T,Mapped_T,MaxLevel>::Iterator::Iterator
   (const SkipList<Key_T,Mapped_T,MaxLevel>::Iterator &that) { ...

您忘记使用SkipList::Iterator::Iterator限定Iterator复制构造函数,因此它正在寻找名为SkipList::Iterator的SkipList成员函数,因此出现错误"no member function"。