C++ STL&;C+中的重载+;

C++ STL&;C+中的重载+;,c++,stl,operator-overloading,C++,Stl,Operator Overloading,我用节点创建了一个双链接列表。我在和STL合作。我在operator++函数中遇到错误。这是我的迭代器类 #include "Node.h" #include <iostream> using namespace std; template<class T> class Iterator{ public: Iterator(); ~Iterator(); Node<T> *node; void operator++(Itera

我用节点创建了一个双链接列表。我在和STL合作。我在
operator++
函数中遇到错误。这是我的
迭代器

#include "Node.h"
#include <iostream>
using namespace std;

template<class T> class Iterator{
public:
    Iterator();
    ~Iterator();
    Node<T> *node;
    void operator++(Iterator<T> val);
    void operator--();
    T operator*();
private:

};

template<class T>
Iterator<T>::Iterator(){
    node = 0;
}

template<class T>
Iterator<T>::~Iterator(){

}

template<class T>
void Iterator<T>::operator++(Iterator<T> val){
    if(node != 0){
        node = node->next;
    }
}

template<class T>
void Iterator<T>::operator--(){
    if(node != 0)
        node = node->prev;
}

template<class T>
T Iterator<T>::operator*(){
    if(node == 0){
        cout << "Node no exists!";
    }

    else{
        return node->value;
    }
}
错误和警告

F:\New folder\C++\Lab14\Iterator.h | |在“类”的实例化中 迭代器“:|

F:\New folder\C++\Lab14\main.cpp | 15 |此处为必填项|

F:\newfolder\C++\Lab14\Iterator.h | 29 |错误:后缀“void” 迭代器::运算符++(迭代器)[with T=int]'必须取'int' 作为它的论据|

函数“int main()”中的F:\New folder\C++\Lab14\main.cpp | |:|

F:\New folder\C++\Lab14\main.cpp | 19 |错误:无“运算符++(int)” 为后缀“++”[-fppermissive]声明|


顺便说一下,我也打算对其他运营商做同样的事情。
运算符*
不用于乘法。

运算符+
必须采用单个
int
或不带参数:

void operator++(int);
void operator++();
第一个是后缀
++
的重载,第二个是前缀
++
的重载。
int
参数只允许发生正确的重载;其值未指定

您的
operator++
声明当前如下所示:

void operator++(Iterator<T> val);
请注意,在更改对象的
节点
成员之前,我还返回了该对象的副本。这通常是后缀增量运算符的预期结果

若要获取前缀增量,请不带参数重载。它应该通过引用返回
*此
。即。 迭代器运算符++(int);//后缀
迭代器和运算符++();//前缀
运算符+
不应接受参数。从原型和定义中删除参数应该可以修复错误


就像一个小“指针”(明白吗?),解引用操作符可能应该返回一个
节点,而不是
T
。(两者都可以,但前者更有意义,并且会使其行为类似于
std
容器。)

与大多数操作符一样,有两种方法可以定义
操作符+
。您可以将其作为迭代器类的成员编写,也可以作为自由函数编写。但是还有另一个复杂的问题,因为有两种形式的
操作符++
:前缀和后缀。所以写这个操作符需要更多的思考

作为成员:

struct Iterator {
    Iterator& operator++();   // prefix
    Iterator operator++(int); // postfix
};
作为一项自由功能:

struct Iterator { };
Iterator& operator++(Iterator&);     // prefix
Iterator operator++(Iterator&, int); // postfix

伙计,学着格式化你的代码…
错误:后缀'void Iterator::operator++(Iterator)[with T=int]'必须以'int'作为参数
-你不理解错误消息的哪一部分?你在“使用STL”是什么意思?@jalf这可能意味着他使用的是标准库对迭代器的定义和要求。
struct Iterator {
    Iterator& operator++();   // prefix
    Iterator operator++(int); // postfix
};
struct Iterator { };
Iterator& operator++(Iterator&);     // prefix
Iterator operator++(Iterator&, int); // postfix