2

這行代碼已經給我的麻煩負載:問題使用成員函數指針

while(!list.add(list.*get().children())); 

這是斷章取義的,但是我只是想使用類成員函數指針的get() 。有人可以提供建設性的反饋嗎?

struct State 
{ 
    State *children(); 
}; 
class List 
{ 
    State *getBFS(); 
    State *getDFS(); 
    State *getUCS(); 
    State *getGS(); 
    State *getAStar(); 
public: 
    State *(List::*get)(); 
    bool add(State *state); 
    List(short type) 
    { 
     switch(type) 
     { 
     case 0: get = &List::getBFS; 
      break; 
     case 1: get = &List::getDFS; 
      break; 
     case 2: get = &List::getUCS; 
      break; 
     case 3: get = &List::getGS; 
      break; 
     default: get = &List::getAStar; 
     } 
    } 
}; 
int main() 
{ 
    List list(0); 
    while(!list.add((list.*get()).children())); 
} 

回答

3

注意的operator()precedenceoperator.*高,所以你應該改變

list.*get() 

(list.*get)() 

編輯

你想要什麼應該是

while(!list.add(((list.* list.get)())->children())); 
//      ~~~~~  ~~ 

注(1)getList成員; (2)返回類型get是指針(即State*),所以您應該使用->而不是.

+0

感謝您的建議,我試過,但它仍然說'標識符'得到「未定義」。這裏是我聲明指針的地方:State *(List :: * get)(); – tayfun2150

+0

@ tayfun2150需要更多的上下文。最好提供一個能夠重現錯誤的[mcve](http://stackoverflow.com/help/mcve)。 – songyuanyao

+0

@ tayfun2150編輯答案。 – songyuanyao