从另一个项目(C ++)中的派生类访问受保护的方法会生成链接器错误

时间:2010-02-10 08:34:11

标签: c++ visual-studio-2005 linker

我正在使用visual studio开发本机C ++。


我有一个包含基础结构的项目 - 我希望在同一解决方案中从其他项目中派生类的基类。假设我在infrastructres项目中有一个基类:

file base.h:

class Base
{
      public:
          void Foo();
      protected: 
       void Bar();
};

在另一个项目中,一个派生自A的类,尝试调用方法栏:

file derived.h:

class Derived : Base
{
    public:
     void DoSomething();
};

file derived.cpp:

void Derived::DoSomething()
{
 Bar();
}

档案main.cpp:

void main()
{
  Derive d;
  d.Foo(); //OK
  d.DoSomething(); // Linker error
}

生成以下链接器错误:

错误1错误LNK2001:未解析的外部符号“public:virtual void __thiscall Base :: Bar(void)”(?Bar @ Base @@ UAEXXZ)main.obj CplusplusTestProject

我做错了什么?

3 个答案:

答案 0 :(得分:2)

确保您的Base :: Bar()方法在某处实现。您可以在定义后添加花括号并重建项目。

答案 1 :(得分:1)

最简单的问题是您没有将其他项目中生成的库链接到您自己的可执行文件中。

答案 2 :(得分:0)

您需要Bar成员的定义。在类定义或单独的Bar文件中添加base.cpp的定义。