if I have
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.
}
Why so?
if I have
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.
}
Why so?
Try (**it).ns_member1
.
Otherwise, the dereferencing would be done after trying to evaluate it.ns_member1
. It's like 3*(1+2)
vs 3*1+2
.
Dereference (the '*') has a lower precedence than the '.' operator, so this line:
cout<<**it.ns_member1<<endl;
Works out like this:
cout << (**(it.ns_member1)) <<endl; // ERROR
I would suggest doing it like this:
cout << (*it)->ns_member1 << endl;
There is really no need to use the dereference operator twice, once followed by the '->' operator will do the same thing and should read clearer to most people.
HTH.