這個標題可能不完全準確 - 它是基於我對發生的事情的最佳猜測,我認爲它比「有人可以解釋這段代碼發生了什麼嗎?」更好。C++爲什麼變量是函數而不是對象?
無論如何,我有這樣的代碼:
class Class1 { };
class Class2
{
public:
Class2(Class1 other){}
};
void func(Class2 x){}
int main()
{
Class2 x(Class1());
func(x); //Compile Error
Class1 y1;
Class2 y2(y1);
func(y2); //Compiles fine
return 0;
}
因此,當我編譯,線標記爲 「編譯錯誤」 以g ++ 4.9提供了一個錯誤:
main.cpp: In function ‘int main()’:
main.cpp:14:10: error: could not convert ‘x’ from ‘Class2 (*)(Class1 (*)())’ to ‘Class2’
func(x);
^
鐺++ 3.4.1提供了類似的錯誤。
我最好的猜測是它認爲「x」是某種函數返回一個Class2,而不是一個Class2本身,但是......爲什麼會發生這種情況?我認爲對Class1的調用會返回一些匿名的Class1,並將其傳遞給Class2的構造函數。
我恢復您的編輯。請不要添加問題的答案。這就是答案。 –
Okie dokie boss :-) – Hounddog