Проблема с предварительным объявлением
От: zfima  
Дата: 28.09.09 08:58
Оценка:
Привет всем.
Наткнулся на проблему с предварительным объявлением


#include <iostream>

class A{
    int a_val;
    
public:
    class B;
    A(int i): a_val(i){}
    friend void compare(A a, B b);
};

class B{
    int b_val;
public:
    B(int i): b_val(i){}
    friend void compare(A a, B b);
};

void compare(A a, B b){
    (a.a_val > b.b_val) ? std::cout << "object of A class greater" : std::cout << "object of B class greater";
}


#include <iostream>
class B;

class A{
    int a_val;
    
public:
    A(int i): a_val(i){}
    friend void compare(A a, B b);
};

class B{
    int b_val;
public:
    B(int i): b_val(i){}
    friend void compare(A a, B b);
};

void compare(A a, B b){
    (a.a_val > b.b_val) ? std::cout << "object of A class greater" : std::cout << "object of B class greater";
}


Первая версия компилируется, вторая жалуется на
Error 1 error C2248: 'A::a_val' : cannot access private member declared in class 'A' c:\documents and settings\fima\my documents\visual studio 2008\projects\schildt_c++\100\100\main.cpp 20

из-за предварительного объявления класса B

Почему?

спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.