c ++中的函数指针:错误:必须使用'。*'或' - > *'来调用函数中的指向成员函数

时间:2012-06-05 17:27:19

标签: c++ function-pointers

代码段如下。无法理解我收到此错误的原因。

void
SipObj::check_each_field()
{
map <std::string, sip_field_getter>::iterator msg;
string str;
char name[20];
bool res = false;
sscanf(get_payload(), "%s %*s", name);
LOGINFO(lc()) <<  "INVITE:" << name;
str = name;
msg = sip_field_map.find(str);
if (msg != sip_field_map.end()) {
    sip_field_getter sip_field = msg->second;
    res = (this).*sip_field();
}
}

 typedef bool (SipObj::*sip_field_getter)();
 static map <std::string, sip_field_getter> sip_field_map;

sip_field_getter is a place holder for function names

3 个答案:

答案 0 :(得分:20)

(this).*sip_field();

此表达式存在两个问题:

  1. this是一个指针,因此您必须使用->*通过指针调用成员函数。

  2. 函数调用(())的优先级高于逐个成员的运算符(.*->*),因此您需要使用括号来正确分组表达

  3. 正确的表达方式是:

    (this->*sip_field)();
    

答案 1 :(得分:10)

看起来你正在调用指针上的方法指针,但是你用点星语法调用它。尝试替换

res = (this).*sip_field();

res = (this->*sip_field)();

答案 2 :(得分:3)

正确的语法是:

(this->*sip_field)();

或者如果您想使用.代替->,那么:

((*this).*sip_field)();

我更喜欢以前的语法。