web-dev-qa-db-fra.com

Comment lier d'amitié avec une classe privée imbriquée

Je pensais pouvoir faire ça:

class TestA
{
private:
  class Nested
  {

  };
};

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

Mais je reçois une erreur:

Erreur C2248 'TestA :: Nested': impossible d'accéder à la classe privée déclarée dans la classe

Existe-t-il un moyen de se lier d'amitié avec une classe privée imbriquée? Comment fait-on ça?

J'ai rencontré cette erreur lors de la tentative de compilation d'un projet MSVC 6 dans MSVC 2017 (C++ 17). Je suppose que cela a fonctionné à l'époque.

Il suffit de commenter la ligne friend class TestA::Nested; Comme ci-dessous:

class TestA
{
private:
  class Nested
  {

  };
};

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

Puisque TestA::Nested A une portée similaire à TestA, la méthode de TestA::Nested Peut accéder aux membres privés/protégés de TestB.

0
binhgreat