簡體   English   中英

c ++中的函數指針:錯誤:必須使用'。*'或' - > *'來調用函數中的指向成員函數

[英]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();

這個表達式有兩個問題:

  1. this是一個指針,所以你必須使用->*通過指針調用成員函數。

  2. 函數調用( () )具有比逐個成員運算符( .*->* )更高的優先級,因此您需要使用括號來正確地對表達式進行分組。

正確的表達方式是:

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM