3

重複の可能性:
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_apointer、オブジェクト自体ではありません。実際、なぜ宣言できないのかa pointer、なぜ「::」を追加するとこの問題が解決するのかという質問があります。

4

0 に答える 0