C++ API 头文件 LNK2019 中的实现
C++ API implementation in heade file LNK2019
我的解决方案中有 3 个项目:
Project_I
、Project_A
、Project_B
Project_I 仅包含头文件(无 cpp
),此项目在头文件中定义了接口,Project_A
和 Projects_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
声明。
我的解决方案中有 3 个项目:
Project_I
、Project_A
、Project_B
Project_I 仅包含头文件(无 cpp
),此项目在头文件中定义了接口,Project_A
和 Projects_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
声明。