在下面的代碼段給我錯誤如果vtable是在編譯時創建的,爲什麼這個錯誤是鏈接器錯誤而不是編譯錯誤?
未定義參考`虛表爲衍生」
代碼:
#include <iostream>
class base{
public:
base(){}
virtual ~base(){}
virtual void test()
{
}
};
class Derived:public base{
public:
Derived(){}
~Derived(){}
void test();
};
int main() {
base* b = new Derived();
delete b;
}
我理解是因爲虛擬溫控功能test
在class Derived
中聲明但未定義。
但是當我g++ -c file.cpp
編譯其按thisçompile或彙編源文件,但不鏈接。它不會給我任何錯誤並編譯好。因此,上述錯誤產生於鏈接時間而不是編譯時間。 從我學到的不是在編譯時創建的vtable
。那爲什麼我在編譯時本身沒有得到這個錯誤呢?
錯誤來自鏈接程序,因爲時間的檢查會顯示給您。 – EJP
@EJP是的,我確實意識到這一點,並且對問題本身進行了描述。但我不明白的是,我不應該在編譯時自己gettng而不是鏈接。 – Hummingbird
「編譯時」的描述包括鏈接時間,但不包括運行時 –