问题是参考这个,这是在不久前发布的.
尽管OP很乐意接受解决了他的问题的答案,但我对于为什么编译器给出了看似错误的错误的细节感到有点兴趣.
下面是我创建的一个小代码示例,用于演示相同的代码:
class YourClass
{
};
class YourClass2
{
};
class MyClass
{
public:
void doSomething(YourClass2 obj)
{
//Nothing more Interesting to do
}
};
int main()
{
YourClass *ptr = new YourClass();
MyClass obj;
obj.doSomething(ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译这与海湾合作委员会(4.3.4)给出了一个看似奇怪的错误的结果:
prog.cpp: In function ‘int main()’:
prog.cpp:23: error: no matching function for call to ‘MyClass::doSomething(YourClass*&)’
prog.cpp:13: note: candidates are: void MyClass::doSomething(YourClass2)
Run Code Online (Sandbox Code Playgroud)
问题是:
为什么编译器会处理呼叫,
obj.doSomething(ptr);
Run Code Online (Sandbox Code Playgroud)
作为对原型的函数的调用,
MyClass::doSomething(YourClass*&)
Run Code Online (Sandbox Code Playgroud)
并不是
MyClass::doSomething(YourClass*)
Run Code Online (Sandbox Code Playgroud)
这似乎是一个明显的例子.