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/