這個問題是參考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;
}
編譯this與GCC(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)
所以問題是:
爲什麼編譯器處理呼叫,
obj.doSomething(ptr);
呼叫與原型的功能,
MyClass::doSomething(YourClass*&)
,而不是
MyClass::doSomething(YourClass*)
這似乎是明顯的情況下。
+1。我喜歡逐步分析編譯器消息。 :-)。最重要的一點是「問題在於你試圖將其解釋爲函數簽名,而不是函數調用的描述。」 – Nawaz