遺漏函式主體或變數
只要使用函式原型,編譯程式就可以繼續而不會發生錯誤,但連結器無法解析對位址的呼叫,因為沒有保留函式程式代碼或變數空間。 在建立連結器必須解析的函式呼叫之前,您不會看到此錯誤。
範例:呼叫未定義的函式
main中的函式呼叫會導致LNK2019,因為原型可讓編譯程序認為函式存在。 鏈接器發現它沒有。
// LNK2019_MFBV.cpp
// LNK2019 expected
void DoSomething(void);
int main() {
DoSomething();
}
範例:呼叫實作的函式
在C++中,請確定您包含類別特定函式的實作,而不只是類別定義中的原型。 如果您要在頭檔外部定義 類別,請務必在函式之前包含類別名稱 (Classname::memberfunction
)。
// LNK2019_MFBV_2.cpp
// LNK2019 expected
struct A {
static void Test();
};
// Should be void A::Test() {}
void Test() {}
int main() {
A AObject;
AObject.Test();
}