我想了解如何在C++中編譯類。爲什麼我可以在不執行其中一項功能的情況下成功編譯?
爲什麼下面的代碼編譯成功? Foo()
需要執行編譯才能成功嗎?
class Test{
public:
Test() {}
int Foo();
};
int main()
{
Test obj;
return 0;
}
我想了解如何在C++中編譯類。爲什麼我可以在不執行其中一項功能的情況下成功編譯?
爲什麼下面的代碼編譯成功? Foo()
需要執行編譯才能成功嗎?
class Test{
public:
Test() {}
int Foo();
};
int main()
{
Test obj;
return 0;
}
代碼中沒有Book()
。如果你正在談論Foo()
,那麼你永遠不會在你的代碼中使用這個函數,所以鏈接器永遠不會被問到,並且會以「未定義的函數」或者類似的錯誤失敗。
沒有人試圖調用Foo
,所以鏈接器不會抱怨缺少的實現,因爲它不是必需的。
如果你寫了virtual int Foo();
,你會看到一個鏈接錯誤。
爲什麼_ **虛擬** _會導致錯誤?什麼改變? – Emadpres
@EmAdpres:請參閱http://stackoverflow.com/q/3560786/14065 –
@EmAdpres:您需要在vtable中輸入一個條目。 –
'Book()'在哪裏? –
「編譯器如何工作?」 - http://en.wikipedia.org/wiki/Compiler –
你知道我的意思 – Emadpres