Привет всем.
Наткнулся на проблему с предварительным объявлением
#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
Почему?
спасибо