我正在尝试创建一个迭代器类作为列表类的成员类,并试图重载间接运算符 (*) 以访问它指向的列表:
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
其中lstptr
是指向列表的指针,current
是指向节点类的指针,节点类包含数据成员data
T
类型。
迭代器声明如下:
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list<T>::iterator
{
//stuff
};
我能够很好地编译重载运算符*的函数定义,但是当我尝试做类似的事情时:
list<int> lst1;
lst1.add(6);
list<int>::iterator IT;
IT = lst1;
//everything above this point compiles fine
int a = *IT; //error here (line fourteen)
我得到的错误是<1>我正在使用非法间接寻址,<2>它不能从list::iterator 转换为int。这两个错误都发生在第十四行。
有人知道我做错了什么以及如何正确重载间接运算符吗?
注意:如果您需要查看更多代码,请告诉我哪一部分,因为我不想将整个代码放在这里,因为它大约有 205 行,而其中 204 行(我认为)没有任何错误。
最佳答案
您重载了乘法运算符。将参数取出来,使其成为间接运算符。
template<class T>
T list<T>::iterator::operator*()
{
return ((this->lstptr)->current)->data;
}
如果您希望编译像 *IT = 3;
这样的代码,您还应该让它返回一个引用。
template<class T>
T& list<T>::iterator::operator*()
{
return ((this->lstptr)->current)->data;
}
关于c++ - 如何重载间接运算符? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/890672/