c++ / c++重载自增操作符

C++/g++ overload increment operators

本文关键字:c++ 操作符 重载      更新时间:2023-10-16

我试图实现一个双链表,并希望创建一个迭代器。结构为:

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) {
    ...
}

现在有两个错误:

  • 成员声明未找到
  • 类型"iterator"无法解析
当我重载其他操作符时,例如解引用操作符或(in-)等于操作符,不会出现错误。错误只会在g++编译器中出现。visual c++的编译器没有显示任何错误,它在那里工作得很好。

在成员函数的行外定义中,函数的返回类型不在类作用域中,因为还没有看到类名。所以把你的定义改成这样:

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

您需要在返回类型中限定iterator:

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