通用 LNK 2019 - 头文件中的函数声明 - 源文件中的定义

Common LNK 2019 - function declaration in header file - definition in source file

本文关键字:定义 函数 声明 源文件 文件 LNK 2019 通用      更新时间:2023-10-16

考虑到这是一个常见问题,如果使用此文件逻辑,此错误的来源可能是什么:

  • Utils.h: 声明bool Dummy();
  • Utils.cpp: define bool Dummy() {return true;}
  • ClassA.h : 一个无关紧要的class A { bool sheet; public: A(); };
  • A类.cpp:不相关的代码:

     #include "Utils.h"
     #include "ClassA.h"
     A::A() { sheet = Dummy(); }
    

    注意:所有头文件都包含保护#pragma once宏。

错误:类似这样

Error   2   error LNK2028: unresolved token (0A00000B) "bool __clrcall Dummy(void)" 
Error   3   error LNK2019: unresolved external symbol "bool __clrcall Dummy(void)" .... in ClassA.obj

布尔__clrcall假人(无效)

您正在编译 ClassA.cpp 文件,该文件实际上具有/clr,并生成托管代码。 然而,你的 Dummy() 函数是在没有/clr 的情况下编译的,这使得调用约定__cdecl。 链接器注意到差异,它找不到 Dummy 的托管实现。

您必须告诉编译器 Utils.cpp 是针对本机代码构建的。 修复 A 类.cpp如下所示:

#pragma managed(push, off)
#include "Utils.h"
#pragma managed(pop)
#include "ClassA.h"
// etc...