C++ STL&;C+中的重载+;
我用节点创建了一个双链接列表。我在和STL合作。我在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
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