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