C++ ошибка LNK2019 с конструкторами и деструкторами в производных классах

У меня есть два класса, один наследованный от другого. Когда я компилирую, я получаю следующие ошибки:

Entity.obj: ошибка LNK2019: неразрешенная внешняя ссылка "общественность: __ thiscall Утилита:: Parsables:: Основа:: Основа (пусто)" (?? 0Base@Parsables@Utility @@ QAE@XZ) ссылаемый в функциональной "общественности: __ thiscall Утилита:: Parsables:: Объект:: Объект (пусто)" (?? 0Entity@Parsables@Utility @@ QAE@XZ)

Entity.obj: ошибка LNK2019: неразрешенная внешняя ссылка "общественность: виртуальный __ thiscall Утилита:: Parsables:: Основа:: ~Base (пусто)" (?? 1Base@Parsables@Utility @@ UAE@XZ) ссылаемый в функциональной "общественности: виртуальный __ thiscall Утилита:: Parsables:: Объект:: ~Entity (пусто)" (?? 1Entity@Parsables@Utility @@ UAE@XZ)

D:\Programming\Projects\Caffeine\Debug\Caffeine.exe: фатальная ошибка LNK1120: 2 неразрешенного внешнего облика

Я действительно не могу выяснить то, что продолжается.. кто-либо может видеть то, что я делаю неправильно? Я использую Экспресс Visual C++ 2008. Вот файлы..

"include/Utility/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/Utility/Parsables/Base.cpp"

#include "Utility/Parsables/Base.hpp"

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

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

"include/Utility/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/Utility/Parsables/Entity.cpp"

#include "Utility/Parsables/Entity.hpp"

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

  Entity::~Entity( void )
  {
  }
 }
}
7
задан Billy ONeal 1 May 2010 в 13:59
поделиться

2 ответа

Релевантный бит таков:

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

Вам нужно дать определение для Base::Base и Base::~Base. Декларации недостаточно. Даже если вам нечего делать в обеих функциях, вы должны оставить пустое тело функции, потому что C++ фактически требует, чтобы функция существовала. C++ помещает такие вещи, как обслуживание виртуальных таблиц, в конструкторы и деструкторы, поэтому они должны быть определены, даже если вам не нужно ничего там делать - C++ должен там что-то делать.

Вы уверены, что Base.cpp включен в сборку?

8
ответ дан 7 December 2019 в 03:13
поделиться

Либо ваш base.cpp не компилируется/линкуется, либо в нем ошибка в написании

0
ответ дан 7 December 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: