考虑到这是一个常见问题,如果使用此文件逻辑,此错误的来源可能是什么:
- Utils.h: 声明
bool Dummy();
- Utils.cpp:定义
bool Dummy() {return true;}
- ClassA.h:一个不相关的
class A { bool sheet;公共(public):一个(); };
ClassA.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
最佳答案
bool __clrcall Dummy(void)
您正在使用/clr 编译 ClassA.cpp 文件,生成托管代码。但是,您的 Dummy() 函数是在没有/clr 的情况下编译的,从而使调用约定成为 __cdecl。链接器注意到差异,它找不到 Dummy 的托管实现。
您必须告诉编译器 Utils.cpp 是为 native 代码构建的。像这样修复 ClassA.cpp:
#pragma managed(push, off)
#include "Utils.h"
#pragma managed(pop)
#include "ClassA.h"
// etc...
关于c++ - Common LNK 2019 - 头文件中的函数声明 - 源文件中的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11206779/