2

我正在尝试实现一个双链表并想要创建一个迭代器。结构是:

template<class type>
class List {
    size_t listElementCnt;
    ...
public:
    ...
    class iterator {
        ...
    public:
        ...
        iterator& operator ++();
        iterator operator ++(int);
        ...
    };
    ...
 };

现在我想实现两个运算符的重载:

template<class type>
typename iterator& List<type>::iterator::operator ++() {
    ...
}
template<class type>
typename iterator List<type>::iterator::operator ++(int) {
    ...
}

现在有两个错误:

  • 未找到成员声明
  • 类型“迭代器”无法解析

当我重载其他运算符时,例如取消引用或 (in-)equals 运算符,没有错误。错误只出现在 g++ 编译器中。visual c++ 的编译器没有显示任何错误,并且在那里工作正常。

4

2 回答 2

4

在成员函数的外联定义中,函数的返回类型不在类范围内,因为尚未看到类名。因此,将您的定义更改为如下所示:

template<class type>
typename List<type>::iterator& List<type>::iterator::operator ++() {
    ...
}
template<class type>
typename List<type>::iterator List<type>::iterator::operator ++(int) {
    ...
}
于 2013-03-23T11:43:57.200 回答
3

您需要符合iterator返回类型:

template<class type>
typename List<type>::iterator& List<type>::iterator::operator ++() {
    ...
}
template<class type>
typename List<type>::iterator List<type>::iterator::operator ++(int) {
    ...
}
于 2013-03-23T11:43:24.450 回答