C++ C++;heade文件LNK2019中的API实现

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 现在,当我尝试编译解决方案时(在定义项目依赖项等之后),我得到

我的解决方案中有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

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

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文件并包含头文件后,问题得到解决