重複の可能性:
C ++継承-アクセスできないベース?
コンパイラがテンプレート引数リスト内で基本クラスコンストラクタを選択するのはなぜですか?
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
、なぜ「::」を追加するとこの問題が解決するのかという質問があります。