我正在尝试创建一个迭代器类作为列表类的成员类,并尝试重载间接运算符 (*) 以访问它指向的列表:
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
where 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)
我收到的错误表明 我正在使用非法间接寻址,并且 它无法从 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)