0
istream & read_person(istream & in, person * & p){
char start, end, s, n, t, e = '\0';
string surname, name, tele, email, pers ="";
if ((in >> start)&&(start =='<')) {
if((in >> pers >> s >> surname >> n >> name >> end) && (start == '<' && pers == "person" && s == 'S' && n == 'N' && end == '>')) {
person p_0(name,surname);
p = &p_0;
}
else if((in >> pers >> s >> surname >> n >> name >> t >> tele >> end) && (start == '<' && pers == "person" && s == 'S' && n == 'N' && t == 'T' && end == '>')
{
person_with_telephone p_t(name, surname, tele);
p = &p_t;
}
else if((in >> pers >> s >> surname >> n >> name >> e >> email >> end) && (start == '<' && pers == "person" && s == 'S' && n == 'N' && e == 'E' && end == '>'))
{
person_with_email p_e(name, surname, email);
p = &p_e;
}
else if((in >> pers >> s >> surname >> n >> name >> t >> tele >> e >> email >> end) && (start == '<' && pers == "person" && s == 'S' && t== 'T' && e == 'E' && n == 'N' && end == '>'))
{
person_with_telephone_and_email p_t_e(name, surname, tele, email);
p = &p_t_e;
}
else
{
in.setstate(ios::badbit); //read failed
}
}
return in;
}
這裏是人類,我有這是很容易理解它的名字和姓氏兩個字符串和一個打印方法超載輸入流++什麼是錯在我的解決方案
class person
{
string name;
string surname;
public:
person(){}
person(string strName, string strSurname):name(strName),surname(strSurname) { }
void set_name(string strName)
{ name= strName; }
void set_surname(string strSurname)
{ surname= strSurname; }
string get_name()const
{ return name; }
string get_surname()const
{ return surname; }
virtual bool has_telephone_p()const
{ return false; }
virtual bool has_email_p()const
{ return false; }
virtual void print(ostream& out)const
{
out << "<person S "<<get_surname()<<" N " << get_name() << ">";
}
};
我我試圖超載iostream,可以閱讀爲這種格式 它讀取罰款的第一個,但沒有閱讀其餘的案件
我對C++非常陌生我應該使用什麼而不是這個 – Rayyan
我從參數類型中刪除了指針,在函數體中的'p'分配後刪除了&符號。 – LogicStuff
同時調用來檢查這個功能,我正在使用這樣的東西\t person * pp = 0; while(read_person(cin,pp)&& pp) \t cout << * pp << endl; – Rayyan