0

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

  • Utils.h:声明bool Dummy();
  • Utils.cpp:定义bool Dummy() {return true;}
  • ClassA.h:无关紧要class A { bool sheet; public: A(); };
  • 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
4

1 回答 1

2

bool __clrcall Dummy(void)

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

您必须告诉编译器 Utils.cpp 是根据本机代码构建的。像这样修复 ClassA.cpp:

#pragma managed(push, off)
#include "Utils.h"
#pragma managed(pop)
#include "ClassA.h"
// etc...
于 2012-06-26T12:30:58.530 回答