我有两个类,一个继承自另一个。当我编译时,我得到以下错误:
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 )
{
}
}
}
答案 0 :(得分:8)
相关的一点是:
unresolved external symbol "public: __thiscall Utility::Parsables::Base::Base(void)"
您需要提供Base::Base
和Base::~Base
的定义。声明不够好。即使你在任何一个函数中都没有任何关系,你需要保留一个空的函数体,因为C ++实际上要求函数存在。 C ++将虚拟表维护等内容放在构造函数和析构函数中,因此即使你不需要在那里做任何事情也必须定义它们--C ++必须在那里做事。
您确定Base.cpp是否包含在构建中?
答案 1 :(得分:0)
你的base.cpp没有被编译/链接,或者你的拼写错误
答案 2 :(得分:0)
今天在Visual Studio 2015中遇到了这个完全相同的错误。不幸的是,接受的答案没有奏效(以及许多相同问题的答案)。对我有用的是右键单击基类cpp文件,排除然后再次包含它。我觉得VS在移动文件并重命名时感到困惑,它只是默默地拒绝编译它,即使它在属性编辑器中标记为“Included In project”= true以及在组中的vcproj文件中列出。这是一个可怕的错误,并最终花了很多时间。