C++ C++;heade文件LNK2019中的API实现
我的解决方案中有3个项目:C++ C++;heade文件LNK2019中的API实现,c++,header,lnk2019,C++,Header,Lnk2019,我的解决方案中有3个项目: 项目I,项目A,项目B 项目I仅包含头文件(无cpp),此项目在头文件中定义了Project\u A和projects\u B派生并实现的接口 由于我希望Project\u I接口方法中的默认行为抛出NOT\u IMPLEMENTED\u异常(我的std::EXCEPTION子类型),因此对于任何Project\u I接口(头文件)中声明的每个方法,我在头文件中编写了此实现,并且在头文件中实现了C'tor 现在,当我尝试编译解决方案时(在定义项目依赖项等之后),我得到
项目I
,项目A
,项目B
项目I仅包含头文件(无cpp
),此项目在头文件中定义了Project\u A
和projects\u B
派生并实现的接口
由于我希望Project\u I
接口方法中的默认行为抛出NOT\u IMPLEMENTED\u异常(我的std::EXCEPTION子类型)
,因此对于任何Project\u 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
如果根本没有
cpp
文件(整个实现都在头文件中),为什么VC++编译器会在project_I
中查找.obj
类a的.obj
文件(需要在以后构建)?如果project_I::ClassA
是在头文件中实现的,它根本不会被编译到dll中(当然,除非头包含在Project_I的某个cpp文件中)
因此,您有两个选项:创建一个cpp文件并包含包含
ClassA
定义的标题,或者从中删除任何\u declspec
声明。您在Project_I中将您的类声明为\u declspec(dllexport)了吗?更好。。。请粘贴Project_I::ClassA的声明和定义。是的,Project_I声明为_declspec(dllexport),因为所有项目都编译为DLL。这是Project I classA声明和定义头(无cpp文件):名称空间Project I{//!Histogram class./*!Image Histogram calculator接口类/类Project I_API classA{public:virtual void Do_Something(){THROW_ERROR(IPM_不受支持,“操作未实现”);}/!Default C'TOR/ClassA(int&_num):m_num(_num){}/!受保护对象的Virtual D'TOR*/Virtual~ClassA(){}:int&m_num;}
谢谢。添加cpp文件并包含头文件后,问题得到解决