web-dev-qa-db-ja.com

ネストされたプライベートクラスを友だちにする方法

私はこれを行うことができると思いました:

class TestA
{
private:
  class Nested
  {

  };
};

class TestB
{
public:
  friend class TestA;
  friend class TestA::Nested;
};

しかし、エラーが発生します:

エラーC2248 'TestA :: Nested':クラスで宣言されたプライベートクラスにアクセスできません

ネストされたプライベートクラスを友だちにする方法はありますか?どうすればいいのですか?

MSVC 2017(C++ 17)でMSVC 6プロジェクトをコンパイルしようとすると、このエラーが発生しました。当時はうまくいったと思います。

以下のようにfriend class TestA::Nested;行をコメント化してください:

class TestA
{
private:
  class Nested
  {

  };
};

class TestB
{
public:
  friend class TestA;
  // friend class TestA::Nested;
};

TestA::NestedTestAと同様のスコープを持っているため、TestA::NestedのメソッドはTestBのプライベート/保護されたメンバーにアクセスできます。

0
binhgreat