可能重复:
C++ inheritance - inaccessible base?
Why does the compiler select the base class constructor inside the template argument list?
class InterfaceA
{
public:
virtual void f () = 0;
};
class A :
private InterfaceA
{
public:
void f () {}
};
class B :
public A
{
private:
/*::*/InterfaceA * m_a; // Adding "::" makes it work
};
GCC和VS2008说‘class InterfaceA’ is inaccessible
。如果我用明确的全局范围声明m_a
,一切都编译得很好。
upd:m_a
是pointer
,而不是对象本身。事实上,为什么我不能声明a pointer
以及为什么添加“::”来解决这个问题?