【问题标题】:C++ inheritence and LNK2019C++ 继承和 LNK2019
【发布时间】:2015-04-09 20:47:29
【问题描述】:

我遇到了这个问题,不知道怎么解决。

我有两节课。一种是基础ProgramVariableBase,一种是派生ProgramVariable。基类位于作为静态库构建的不同项目中。我在派生类的项目属性中设置了额外的包含和库目录。我正在使用 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;
}

我可以毫无问题地使用基类构建项目,但是当我尝试使用派生类构建项目时出现错误。每个错误看起来都相似,并且涉及基类的方法、构造函数和析构函数。我在这里寻找类似的答案,但没有人帮助。是我做错了什么还是我的项目属性不正确?

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)" 

【问题讨论】:

  • 我在带有派生类的项目属性中设置了额外的包含和库目录。您是否真的将库添加到您的链接器设置中?只是将库放在库目录中并不意味着 Visual Studio 会使用它。
  • 好的,它有帮助。谢谢你。现在正确的步骤是什么?我应该删除这个问题吗?还是您要发布答案以便我标记它?

标签: c++ visual-studio-2012 inheritance lnk2019


【解决方案1】:

您需要将库添加到链接器设置中。仅将包含库的文件夹放入您的附加库设置中是不够的。

您可以通过 Linker->Input->Additional Dependencies 或在您的 c++ 代码中使用 pragma 将库添加到您的链接器设置中。

#pragma comment(lib, "mylib.lib")

【讨论】:

    【解决方案2】:

    也许您没有将库添加到其他依赖项列表(实际链接的库列表)。

    转到Project Properties -> Linker -> Input -> Additional Dependencies 并在此处添加库的名称。

    【讨论】:

      猜你喜欢
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 2015-04-19
      • 2011-06-16
      • 2011-07-31
      • 2019-06-21
      相关资源
      最近更新 更多