[英]No matching function to call: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘f (…)’, e.g. ‘(… ->* f) (…)’
[英]function pointers in c++ : error: must use '.*' or '->*' to call pointer-to-member function in function
代碼段如下。 無法理解為什么我收到此錯誤。
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
(this).*sip_field();
這個表達式有兩個問題:
this
是一個指針,所以你必須使用->*
通過指針調用成員函數。
函數調用( ()
)具有比逐個成員運算符( .*
或->*
)更高的優先級,因此您需要使用括號來正確地對表達式進行分組。
正確的表達方式是:
(this->*sip_field)();
看起來你正在調用指針上的方法指針,但是你用點星語法調用它。 嘗試更換
res = (this).*sip_field();
同
res = (this->*sip_field)();
正確的語法是這樣的:
(this->*sip_field)();
或者如果你想使用.
而不是->
,然后這個:
((*this).*sip_field)();
我更喜歡以前的語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.