-4

当我调用该函数来填充第二个类时,它只是以某种方式传递了它。不是调用函数 (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;
}
4

2 回答 2

0

解决问题的另一种方法是致电

if(!cin) cin.clear()

将 istream 状态设置回良好状态。

于 2013-06-21T15:55:33.747 回答
0

看起来您的Name_pairs::read_ages()方法从读取cin直到流关闭。当您第一次调用fill时,它会读取直到流关闭。当您调用fill第二个Name_pairs实例时,cin已经关闭,因此无法读取任何内容,因此您的向量为空test1

于 2013-05-09T00:18:21.900 回答