【发布时间】:2017-11-15 19:45:08
【问题描述】:
我正在为列表类创建一个迭代器。迭代器有一个解引用运算符:
T& operator*() const {
return this->currentNode->data;
}
在尝试使用迭代器时:
for( ; list->begin() != list->end; (*list_iter).operator++())
{
cout << list_iter << endl;
cout << list_iter->operator*() << endl;
//cout << *list_iter << endl; //not working
}
注释行说“二进制表达式 ostream 和 MyList::iterator 的操作数无效”。同样,如果我从 (*list_iter).operator++() 更改为 list_iter++ 或 (*list_iter)++,我会收到类似的错误。
我认为正在发生的事情是这样的:
int num1 = 3;
int *num2 = new int;
*num2 = 3;
在这种情况下,num1 == *num2... *num2 在功能上类似于 num1(两者都是整数),虽然 num2 是指向整数的指针,但 *num2 使它成为整数。
所以在:
MyList list1();
MyList *list2 = new MyList();
在这种情况下,我是否应该期望“*list2”与 list1 相似,就像“*num2”与 num1 相似一样? num2 会调用解引用器,还是尝试将 MyList 转换为 MyList?
真的很难理解这里发生的事情。谢谢!
【问题讨论】:
-
我认为您需要包含一个小而完整的代码示例。从您发布的内容来看,目前尚不清楚出了什么问题。
标签: c++ operator-overloading dereference