C++ API 头文件 LNK2019 中的实现

C++ API implementation in heade file LNK2019

我的解决方案中有 3 个项目: Project_IProject_AProject_B

Project_I 仅包含头文件(无 cpp),此项目在头文件中定义了接口,Project_AProjects_B 从中派生并实现。

因为我希望 Project_I 接口方法中的默认行为抛出 NOT_IMPLEMENTED_EXCEPTION (my std::exception subtype),对于任何 Project_I 接口(头文件)中声明的每个方法,我在头文件,我也在头文件中实现了 C'TOR。

现在,当我尝试编译解决方案时(在定义项目依赖项等之后...)我收到以下错误

Error   1   error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl Project_I::ClassA::ClassA()" referenced in function "public: __cdecl Project_B::ClassA_1::ClassA_1 K:\src\Project_B\ClassA_1.obj

为什么VC++编译器在project_I中寻找ClassA.obj文件(需要在后面构建)如果没有cpp 文件(整个实现都在头文件中)?

如果你的 Project_I::ClassA 被实现到一个 header 文件中,它根本不会被编译到 dll 中(除非 header 被 [= 的一些 cpp 文件包含17=],当然)。

因此,您有两个选择:创建一个 cpp 文件并包含包含 ClassA 定义的 header 或从中删除任何 __declspec 声明。