如果我有
list<NS*> v;
typename list<NS*>::iterator it;
for(it = v.begin();it!=v.end();++it){
cout<<**it.ns_member1<<endl; // does not compile
NS ns = **it;
cout<<ns.ns_member1<<endl; // this compiles.
}
为什么会这样?
答案 0 :(得分:3)
尝试(**it).ns_member1
。
否则,在尝试评估it.ns_member1
后将取消引用。这就像3*(1+2)
vs 3*1+2
。
答案 1 :(得分:3)
取消引用('*')的优先级低于'。'运营商,所以这一行:
cout<<**it.ns_member1<<endl;
像这样:
cout << (**(it.ns_member1)) <<endl; // ERROR
我建议这样做:
cout << (*it)->ns_member1 << endl;
实际上没有必要使用解除引用运算符两次,一次后跟' - &gt;'运营商将做同样的事情,应该读大多数人更清楚。
HTH。