我正在使用visual studio在本機C++中進行開發。在不同項目(C++)中從派生類訪問受保護的方法會生成鏈接器錯誤
我有一個項目,其中包含基礎設施 - 我想從同一解決方案中的其他項目中派生類的基類。說我有在infrastructres項目基類:
文件base.h:
class Base
{
public:
void Foo();
protected:
void Bar();
};
,並在另一個項目中,從A派生的類,試圖調用方法吧:
文件derived.h:
class Derived : Base
{
public:
void DoSomething();
};
文件derived.c PP:
void Derived::DoSomething()
{
Bar();
}
文件main.cpp中:
void main()
{
Derive d;
d.Foo(); //OK
d.DoSomething(); // Linker error
}
生成以下的鏈接器錯誤:
錯誤1個錯誤LNK2001:解析外部符號「公共:虛擬無效__thiscall基地: :Bar(void)「(?Bar @ Base @@ UAEXXZ)main.obj CplusplusTestProject
我在做什麼錯?
是你的項目DLL庫嗎? – mcdave 2010-02-12 06:37:56
這是Shelly了。 不知道如何添加評論以上的答案。 我將繼承改爲public - 仍然無法正常工作。 是的,Bar有一個實現,我只是沒有把它放在問題中。 如果我將Bar的訪問級別更改爲public,則鏈接錯誤消失 - 只有當Bar受到保護時纔會出現鏈接錯誤。 難道是VS連接器不會將保護和私有方法添加到符號表中嗎? – 2010-02-10 09:43:14