C++继承与LNK2019
C++ inheritence and LNK2019
我遇到了这个问题,不知道怎么解决。
我有两个 class。一种是基础ProgramVariableBase
,一种是派生ProgramVariable
。 Base class 在不同的项目中,被构建为静态库。我在派生 class 的项目属性中设置了额外的包含和库目录。我正在使用 VS2012.
// ProgramVariableBase.h
#include <string>
class ProgramVariableBase
{
protected:
std::string m_name;
bool m_initialized;
public:
ProgramVariableBase(const char* name);
virtual ~ProgramVariableBase();
virtual const std::string & Name();
virtual void MakeInitialized();
};
// ProgramVariableBase.cpp
#include "ProgramVariableBase.h"
ProgramVariableBase::ProgramVariableBase(const char* name)
{
m_name = name;
m_initialized = false;
}
ProgramVariableBase::~ProgramVariableBase()
{
}
const std::string & ProgramVariableBase::Name()
{
return m_name;
}
void ProgramVariableBase::MakeInitialized()
{
m_initialized = true;
}
// ProgramVariable.h
#include "ProgramComponents\ProgramVariableBase.h"
class ProgramVariable : public ProgramVariableBase
{
public:
ProgramVariable(const char* name);
~ProgramVariable();
void MakeInitialized() override;
};
// ProgramVariable.cpp
#include "ProgramVariable.h"
ProgramVariable::ProgramVariable(const char* name) : ProgramVariableBase(name)
{
}
ProgramVariable::~ProgramVariable()
{
}
void ProgramVariable::MakeInitialized()
{
m_initialized = true;
}
我可以毫无问题地使用基础 class 构建项目,但是当我尝试使用派生 class 构建项目时出现错误。每个错误看起来都很相似,并且涉及基 class 的方法、其构造函数和析构函数。我在这里寻找类似的答案,但没有人提供帮助。是我做错了什么还是我的项目属性不正确?
unresolved external symbol "public: __thiscall ProgramVariableBase::ProgramVariableBase(char const *)" (??0ProgramVariableBase@@QAE@PBD@Z) referenced in function "public: __thiscall ProgramVariable::ProgramVariable(char const *)"
unresolved external symbol "public: virtual __thiscall ProgramVariableBase::~ProgramVariableBase(void)" (??1ProgramVariableBase@@UAE@XZ) referenced in function "public: virtual __thiscall ProgramVariable::~ProgramVariable(void)"
也许您没有将库添加到附加依赖项列表(库列表,实际上已链接)。
转到 Project Properties
-> Linker
-> Input
-> Additional Dependencies
并在那里添加你的图书馆的名称。
您需要将库添加到链接器设置中。仅将包含库的文件夹放入您的附加库设置中是不够的。
您可以通过 Linker->Input->Additional Dependencies 或在您的 C++ 代码中使用 pragma 将库添加到您的链接器设置中。
#pragma comment(lib, "mylib.lib")