c++:没有匹配的调用函数,但候选人具有完全相同的签名

标签 c++ g++

g++ 提示

myclass.cxx:185: error: no matching function for call to 'IMyInterface::doSomething(const SomeClass*, unsigned int)'
IMyInterface.h:34: note: candidates are: virtual void IMyInterface::doSomething(const SomeClass*&, unsigned int)

当我打电话

m_instanceOfInterface->doSomething((const SomeClass*)0,(unsigned int)1);

任何指向原因的指针?在我看来,g++ 在声明的内容和调用的内容之间看到了完全相同的签名,但仍然提示找不到匹配的函数。

在相同的上下文中,我可以调用 IMyInteface 的另一个函数,IMyInterface::doSomethingElse(float& p)。所以不知何故 const 是问题所在?


我没有传递 NULL 指针并强制转换一个常量整数只是为了好玩......原来我有

m_instanceOfInterface->doSomething((const SomeClass*)m_someDerivedClass,m_anInteger);

同样的错误。所以我决定通过给出一些明确的论据来用 g++ 澄清事情。我可以向您保证,NULL 指针不是问题所在 - 虽然可以理解,当看到用 const 传递 NULL 时,我们都有些畏缩 :)

最佳答案

该函数需要通过非常量引用来传递其参数,该引用不能绑定(bind)到临时对象。观察:

void foo(int, T &);
foo(1, T()); // error, cannot bind to temporary

在你的例子中,T = SomeClass const *。所以,你提供了一个非临时的:

SomeClass const * pc = 0;
m_instanceOfInterface->doSomething(pc, 1U);

请注意,这样做的目的大概是为 pc 填充一些有意义的值,因此请确保将其适本地包含在内。

关于c++:没有匹配的调用函数,但候选人具有完全相同的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251253/

相关文章:

时间:2018-01-08 标签:c++mfc: update HWND through a control box

c++ - 标识符在初始化时未定义

c++ - 这种功能是如何工作的?

c++ - 特殊键输入不起作用(输入、退格、制表符等)

visual-studio - 如何创建一个cmake变量

c++ - 为什么不同的编译器生成不同大小的文件?

c++ - 如何在约束delaunay三角剖分中获取三角形的顶点?

g++ - 使用 g++ 进行分析

c++ - 了解 C++ STL 错误

c++ - 尝试编译 boost 和 openssl 时出现编译错误(使用 Websocket++ 或 CPPRestSDK 时)