缺少函数体或变量

只有函数原型,编译器可以继续而不会出错,但链接器不能解析对地址的调用,因为没有保留函数代码或变量空间。 除非创建对链接器必须解析的函数的调用,否则看不到此错误。

示例:调用未定义的函数

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();
}

另请参阅

链接器工具错误 LNK2019