Как разрешить класс, который должен использоваться при объявлении ошибки друга?

class two;
class one
{
    int a;
    public:
        one()
        {
            a = 8;
        }
    friend two;
};

class two
{
    public:
        two() { }
        two(one i)
        {
            cout << i.a;
        }
};

int main()
{
    one o;
    two t(o);
    getch();
}

Я получаю эту ошибку от Dev-C++:

a class-key must be used when declaring a friend

Но он отлично работает при компиляции Microsoft Visual C++.


person shubhendu mahajan    schedule 28.08.2011    source источник
comment
Эээ, поправьте, пожалуйста, форматирование! Я пытался, но это было слишком сложно.   -  person David Heffernan    schedule 28.08.2011
comment
Пожалуйста, не могли бы вы исправить пробелы.   -  person Oliver Charlesworth    schedule 28.08.2011
comment
Одно примечание: не используйте Dev-C++, он устарел.   -  person Griwes    schedule 28.08.2011


Ответы (2)


Тебе нужно

 friend class two;

вместо

 friend two;

Кроме того, вам не нужно предварительно объявлять свой класс отдельно, потому что объявление о дружбе само по себе является объявлением. Вы даже можете сделать это:

//no forward-declaration of two
class one
{
   friend class two;
   two* mem;
};

class two{};
person Armen Tsirunyan    schedule 28.08.2011
comment
спасибо за помощь, но у меня не было ошибок с визуальным компилятором С++ - person shubhendu mahajan; 28.08.2011
comment
@ desprado07: Ну, потому что многие компиляторы не совсем строги с этим правилом (что слово class или struct присутствует в объявлении друга). Однако это предписано стандартом в соответствии с 11.4. Принятый ответ на другой вопрос может помочь ты. - person Armen Tsirunyan; 28.08.2011
comment
Это разрешено опускать в С++ 11 - person Johannes Schaub - litb; 28.08.2011

Ваш код имеет:

friend two;

Что должно быть:

friend class two;
person SoapBox    schedule 28.08.2011