Class gọi class

#include<iostream>
using namespace std;
class cdiem
{
private:
	float x;
	float y;
public:
	friend class cduongtron;
	friend istream& operator >> (istream&, cduongtron&);
	friend ostream& operator << (ostream&, cduongtron&);
};
//typedef class cdiem diem;
class cduongtron
{
private:
	cdiem i;
	float r;
public:
	friend istream& operator >> (istream&, cduongtron&);
	friend ostream& operator << (ostream&, cduongtron&);
};
//typedef class cduongtron duongtron;
int main()
{
	cduongtron o;
	cin >> o;
	cout << o << endl;
	system("pause");
}
istream& operator >> (istream& is, cduongtron& o)
{
	cout << "Nhap duog tron:\nNhap tam:";
	is >> o.i.x;
	is >> o.i.y;
	cout << "Nhap ban kinh: ";
	is >> o.r;
	return is;
}
ostream& operator << (ostream& os, cduongtron & o)
{
	os << "Duong tron co:\nTam: (" << o.i.x << "," << o.i.y << ")\nBan kinh: " << o.r;
	return os;
}

Trên đây em đã làm class gọi class mặc dù đã thêm các câu lệnh friend trong class cdiem nhưng vẫn bị lỗi (‘float cdiem::x’ is private) thì có thể sửa sao ạ. Em mong muốn vẫn giữ lại câu lệnh is >> o.i.x; ạ.
Các anh có thể giúp em không ạ!
Em cảm ơn!

friend không có tính bắc cầu nên add friend function vào cả hai class là đúng.

Lỗi nằm ở chỗ phải có cái tên cduongtron trước khi có class cdiem vì friend function:

class cduongtron;
class cdiem {
// ...
   friend istream& operator >> (istream&, cduongtron&);  // <--
   friend ostream& operator << (ostream&, cduongtron&);  // <--
};
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?