2009-11-23 42 views
2

,如果我有迭代器解引用問題

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. 
} 

爲什麼會這樣?

回答

3

解除引用('*')的優先級低於'。'。運營商,所以這行:

cout<<**it.ns_member1<<endl; 

作品出來是這樣的:

cout << (**(it.ns_member1)) <<endl; // ERROR 

我建議做這樣的:

cout << (*it)->ns_member1 << endl; 

實在是沒有必要使用引用操作兩次,其次是' - >'操作員會做同樣的事情,應該對大多數人更清楚。

HTH。

3

嘗試(**it).ns_member1

否則,在嘗試評估it.ns_member1之後,將執行解引用。這就像3*(1+2) vs 3*1+2