【发布时间】:2011-08-18 17:52:24
【问题描述】:
这个问题是针对 this 的,该问题是不久前发布的。
虽然 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;
}
用 GCC(4.3.4) 编译 this 会得到一个看似奇怪的错误结果:
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)
所以问题是:
为什么编译器会处理调用,
obj.doSomething(ptr);
作为对带有原型的函数的调用,
MyClass::doSomething(YourClass*&)
而不是
MyClass::doSomething(YourClass*)
这似乎是显而易见的情况。
【问题讨论】: