[英]Correct syntax for operator >> overloading to members of nested class?
我有類 Address嵌套在類 Student中,我想通過 istream 將每個輸入行輸入到類 Student中operator>>重載。
class Address {
public:
....
private:
int house_no;
string street;
string city;
string postcode
};
class Student {
public:
....
friend istream& operator>>(istream& iss, Student& Obj) {
iss >> Obj.roll_no >> Obj.name
>> Obj.addr.house_no >> Obj.addr.street >> Obj.addr.city >> addr.postcode; //problem line
return iss;
}
private:
int roll_no;
string name;
Address addr;
};
//Sample line of test data (fields delimiter is comma):
1101, Alice Rilley, 421, Main St., New York, 230011
2202, Bert McDonald, 152, Railroad St., Madison, 120022
...
我的鏈接 istream(問題行)沒有解決錯誤消息:
./include/Student.h: In function ‘std::istream& operator>>(std::istream&, Student&)’:
./include/Student.h:23:60: error: ‘int Address::house_no’ is private within this context
23 | iss >> Obj.roll_no >> Obj.name >> Obj.addr.house_no >> ......
我在 SO 中只找到了一篇類似的帖子,但它是針對“運算符 << ”的,與我的需要相反。 而且,我很難消化。 我在一行中讀取並將該行輸入到類 Student的對象成員(尤其是嵌套類 Address )中的正確語法是什么? 非常感謝!
問題不在於運營商本身,而在於成員的可見性。 您正在使用Address
類作為Student
的成員,但不能從它訪問Address::house_no
成員(不僅對於輸入運算符)。
一種解決方案(一個簡單但不好的解決方案)是打開Address
的成員:
class Address {
public:
....
//private:
public:
int house_no;
string street;
string city;
string postcode
};
但更好的方法是為Address
定義一個輸入運算符:
class Address {
public:
....
private:
friend istream& operator>>(istream& iss, Address& Obj);
int house_no;
string street;
string city;
string postcode
};
class Student {
public:
....
friend istream& operator>>(istream& iss, Student& Obj);
private:
int roll_no;
string name;
Address addr;
};
istream& operator>>(istream& iss, Address& Obj) {
iss >> Obj.house_no >> Obj.street >> Obj.city >> Obj.postcode;
return iss;
}
istream& operator>>(istream& iss, Student& Obj) {
iss >> Obj.roll_no >> Obj.name >> Obj.addr;
return iss;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.