缺少函数体或变量
只有函数原型,编译器可以继续而不会出错,但链接器不能解析对地址的调用,因为没有保留函数代码或变量空间。 除非创建对链接器必须解析的函数的调用,否则看不到此错误。
示例:调用未定义的函数
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();
}