Законно ли объявлять дружбу с заранее объявленным классом? - PullRequest
2 голосов
/ 23 сентября 2010

Я успешно построил нечто похожее на следующий код в Visual Studio 2008:

class OpDevconfigSession;
class DevconfigSession
{
... 
private
   friend class OpDevconfigSession;
};

Опять же, это хорошо работает с visual studio. Однако, если я пытаюсь скомпилировать код под g ++ версии 4.3.2, я получаю сообщение об ошибке, такое как:

error: friend declaration does not name a class or function

Я знаю, что соответствие стандартам не является сильной стороной Microsoft, поэтому мне интересно, противоречит ли написанный мною код стандарту, чего я пока не понимаю. У кого-нибудь есть мысли?

Спасибо

Ответы [ 2 ]

7 голосов
/ 23 сентября 2010

В вашем фрагменте кода отсутствует двоеточие после private.После исправления это работает для Me ™ в g ++ (http://codepad.org/XJuyEq9z).

. Это также стандартно - вам даже не нужно отдельное предварительное объявление. См. Этот пример из 11.4 стандарта:

class X {
    enum { a=100 };
    friend class Y;
};

class Y {
    int v[X::a];        // OK, Y is a friend of X
};
1 голос
/ 24 сентября 2010

Следующая работа для меня в g++ ver 4.4.1.

class OpDevconfigSession;
class DevconfigSession
{
  private:
   friend class OpDevconfigSession;
};

Я не понимаю, почему это может быть незаконно.

...