当我调用函数来填充第二个类时,它只是以某种方式传递它。调用函数(fill())不是有错误的,因为我在遇到这个问题后写了这个错误。代码发布在下面:
class Name_pairs {
public:
void read_names();
void read_ages();
void sort();
vector<string> names() const { return name; }
vector<double> ages() const { return age; }
private:
vector<string> name;
vector<double> age;
};
void Name_pairs::read_names() {
string s;
while(cin>>s) {
if(s == "|")
break;
name.push_back(s);
}
}
void Name_pairs::read_ages() {
double d;
while(cin>>d) {
if(d < 0)
break;
age.push_back(d);
}
}
void Name_pairs::sort() {
vector<string> dup_name = name;
vector<double> dup_age = age;
std::sort(name.begin(), name.end());
double buffer;
for(int i = 0; i < name.size(); i++) {
for(int ii = 0; ii < dup_name.size(); ii++) {
if(name[i] == dup_name[ii]) {
buffer = age[i];
age[i] = dup_age[ii];
break;
}
}
}
return;
}
void fill(Name_pairs& np)
{
np.read_names();
np.read_ages();
np.sort();
}
int main() try
{
Name_pairs test;
Name_pairs test1;
fill(test);
fill(test1);
return 0;
}
答案 0 :(得分:0)
看起来您的Name_pairs::read_ages()
方法会从cin
读取,直到关闭该流。第一次调用fill
时,它将一直显示,直到关闭流。当您为第二个fill
实例致电Name_pairs
时,cin
已经关闭,因此无法读取任何内容,请将您的媒介留空test1
。
答案 1 :(得分:0)
解决问题的另一种方法是致电
if(!cin) cin.clear()
将istream状态设置为good。