这个错误是什么意思?
error: no matching function for call to `foo::bar(Qux (&)())`
Run Code Online (Sandbox Code Playgroud)
我知道编译器(g ++)无法将函数调用与foo成员函数匹配.我特意询问最后的额外内容; 这一点:(&)().
作为参考,我的函数调用是这样的:
// inside another member function of `foo`
Qux qux();
this->bar(qux);
Run Code Online (Sandbox Code Playgroud)
签名bar是:
virtual void bar(Qux&);
Run Code Online (Sandbox Code Playgroud)
编译器还说唯一的候选者是:
virtual void bar(Qux&);
Run Code Online (Sandbox Code Playgroud)
我的函数调用签名与我的定义签名有何不同,具有什么(&)()意义?
好吧,(&)()单独并不意味着什么.(&)()只是其中一部分Qux (&)()意味着引用一个不带任何东西并返回的函数Qux.这是因为:
Qux qux(); //PROBLEM!
this->bar(qux);
Run Code Online (Sandbox Code Playgroud)
这里的第一行不声明对象.它声明了一个函数.
在C++中搜索vexing parse,在这个网站上,你会看到很多关于它的主题,它会详细讨论这个问题.