У меня есть два класса, один наследованный от другого. Когда я компилирую, я получаю следующие ошибки:
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 )
{
}
}
}
Релевантный бит таков:
unresolved external symbol "public: __thiscall Utility::Parsables::Base::Base(void)"
Вам нужно дать определение для Base::Base
и Base::~Base
. Декларации недостаточно. Даже если вам нечего делать в обеих функциях, вы должны оставить пустое тело функции, потому что C++ фактически требует, чтобы функция существовала. C++ помещает такие вещи, как обслуживание виртуальных таблиц, в конструкторы и деструкторы, поэтому они должны быть определены, даже если вам не нужно ничего там делать - C++ должен там что-то делать.
Вы уверены, что Base.cpp включен в сборку?
Либо ваш base.cpp не компилируется/линкуется, либо в нем ошибка в написании