C++ C++;LNK2019派生类中的构造函数和析构函数出错

C++ C++;LNK2019派生类中的构造函数和析构函数出错,c++,inheritance,constructor,destructor,lnk2019,C++,Inheritance,Constructor,Destructor,Lnk2019,我有两个类,一个继承自另一个。编译时,会出现以下错误: Entity.obj:错误LNK2019:未解析的外部符号“public:u thiscall实用工具::Parsables::Base::Base(void)”(?)??0Base@Parsables@效用@@QAE@XZ)在函数“public:u thiscall实用工具::Parsables::Entity::Entity(void)”中引用(?)??0Entity@Parsables@效用@@QAE@XZ) Entity.obj:错

我有两个类,一个继承自另一个。编译时,会出现以下错误:

Entity.obj:错误LNK2019:未解析的外部符号“public:u thiscall实用工具::Parsables::Base::Base(void)”(?)??0Base@Parsables@效用@@QAE@XZ)在函数“public:u thiscall实用工具::Parsables::Entity::Entity(void)”中引用(?)??0Entity@Parsables@效用@@QAE@XZ)

Entity.obj:错误LNK2019:未解析的外部符号“public:virtual\u thiscall实用程序::Parsables::Base::~Base(void)”(??)??1Base@Parsables@效用@@UAE@XZ)在函数“public:virtual\u thiscall实用工具::Parsables::Entity::~ Entity(void)”中引用(?)??1Entity@Parsables@效用@@UAE@XZ)

D:\Programming\Projects\Caffeine\Debug\Caffeine.exe:致命错误LNK1120:2个未解析的外部

我真的搞不懂发生了什么事。。有人能看出我做错了什么吗?我使用Visual C++快件2008。这是文件

“include/Utility/Parsables/Base.hpp”

“src/Utility/Parsables/Base.cpp”

“include/Utility/Parsables/Entity.hpp”

“src/Utility/Parsables/Entity.cpp”


相关位如下所示:

unresolved external symbol "public: __thiscall Utility::Parsables::Base::Base(void)"
您需要为
Base::Base
Base::~Base
提供定义。声明是不够的。即使在任一函数中都没有任何事情,也需要留下一个空函数体,因为C++实际上需要函数存在。C++在构造函数和析构函数中放置虚拟表维护之类的东西,因此即使在不需要做任何事情的情况下,它们也必须被定义——C++必须在其中做事情。
您确定生成中包含Base.cpp吗?

您的Base.cpp没有被编译/链接,或者其中有拼写错误

今天在Visual Studio 2015中遇到了完全相同的错误。不幸的是,被接受的答案不起作用(以及许多相同问题的答案)。对我有效的方法是右键单击基类cpp文件,排除它,然后再次包含它。我想VS在移动文件并重命名时不知怎么搞糊涂了,它只是默默地拒绝编译它,即使它在属性编辑器中标记为“includedinproject”=true,并且在组中的vcproj文件中列出。这是一个可怕的错误,结果花了好几个小时在上面。

项目中是否包含所有这些文件?你看到它们正在编译吗?是的,它们都包含在内并且编译得很好。试着去掉名称空间只是一个c&p的答案我发布了一个更进一步的答案:“我刚刚检查并记住了一些东西,我有两个文件都名为Base.cpp,但它们在不同的目录中。我看到一个编译,但不是两个。这会是问题吗?”@BLH当然。首先要做的是确定链接的内容。重命名任何可疑文件,并检查结果。我的源文件中确实有定义,我留下了一个空函数体,如您所述。@BLH:请再次阅读我的最后一句:)(我编辑了答案,尽管答案不是那样显示的)我刚刚检查并记住了一些内容,我有两个文件都名为Base.cpp,但它们在不同的目录中。我看到一个,但不是两个。这可能是问题所在吗?@BLH:是的,可以。默认情况下,AFAIK VS将其对象文件转储到单个目录中,每个文件都以产生它的源文件命名。这样一来,其中一个就有可能覆盖另一个。@BLH最好不要有复杂的目录结构(或复杂的命名空间方案)-它们总是会造成麻烦,尤其是在移植代码时。
#include "Utility/Parsables/Base.hpp"

namespace Utility
{
 namespace Parsables
 {
  Base::Base( void )
  {
  }

  Base::~Base( void )
  {
  }
 }
}
#ifndef CAFFEINE_UTILITY_PARSABLES_ENTITY_HPP
#define CAFFEINE_UTILITY_PARSABLES_ENTITY_HPP

#include "Utility/Parsables/Base.hpp"

namespace Utility
{
 namespace Parsables
 {
  class Entity : public Base
  {
  public:
   Entity( void );
   virtual ~Entity( void );
  };
 }
}

#endif //CAFFEINE_UTILITY_PARSABLES_ENTITY_HPP
#include "Utility/Parsables/Entity.hpp"

namespace Utility
{
 namespace Parsables
 {
  Entity::Entity( void )
  {
  }

  Entity::~Entity( void )
  {
  }
 }
}
unresolved external symbol "public: __thiscall Utility::Parsables::Base::Base(void)"