繁体   English   中英

C ++ LNK2019错误与派生类中的构造函数和析构函数

[英]C++ LNK2019 error with constructors and destructors in derived classes

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

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

Entity.obj:错误LNK2019:未解析的外部符号“public:virtual __thiscall Utility :: Parsables :: Base :: ~Base(void)”(?? 1Base @ Parsables @ Utility @@ UAE @ XZ)在函数“public”中引用: virtual __thiscall Utility :: Parsables :: Entity ::〜Entity(void)“(?? 1Entity @ Parsables @ Utility @@ UAE @ XZ)

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

我真的无法弄清楚发生了什么......谁能看到我做错了什么? 我正在使用Visual C ++ Express 2008.这是文件..

“包括/实用/ Parsables / Base.hpp”

#ifndef CAFFEINE_UTILITY_PARSABLES_BASE_HPP
#define CAFFEINE_UTILITY_PARSABLES_BASE_HPP

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

#endif //CAFFEINE_UTILITY_PARSABLES_BASE_HPP

“SRC /实用/ Parsables / Base.cpp”

#include "Utility/Parsables/Base.hpp"

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

  Base::~Base( void )
  {
  }
 }
}

“包括/实用/ Parsables / Entity.hpp”

#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

“SRC /实用/ Parsables / Entity.cpp”

#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)"

您需要为Base::BaseBase::~Base提供定义。 声明不够好。 即使你在任何一个函数中都没有任何关系,你需要保留一个空的函数体,因为C ++实际上要求函数存在。 C ++将虚拟表维护之类的东西放在构造函数和析构函数中,因此即使你不需要在那里做任何事情也必须定义它们--C ++必须在那里做事。

你确定Base.cpp被包含在构建中吗?

刚刚在Visual Studio 2015中遇到了这个完全相同的错误。不幸的是,接受的答案没有奏效(以及许多相同问题的答案)。 对我有用的是右键单击基类cpp文件,排除然后再次包含它。 我觉得VS在移动文件并重命名时感到困惑,它只是默默地拒绝编译它,即使它在属性编辑器中标记为“Included In project”= true以及在组中的vcproj文件中列出。 这是一个可怕的错误,并最终花了很多时间。

你的base.cpp没有被编译/链接,或者你有一个拼写错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM