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

时间:2010-05-01 13:53:21

标签: c++ inheritance constructor destructor lnk2019

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

  

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 )
  {
  }
 }
}

3 个答案:

答案 0 :(得分:8)

相关的一点是:

unresolved external symbol "public: __thiscall Utility::Parsables::Base::Base(void)"

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

您确定Base.cpp是否包含在构建中?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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