0

这是我的班级的定义:

class BPP
{
    unsigned            n;                  /* nº de instancias */
    vector<string>      nombre_instancia;   /* nombre de la instancia*/
    vector<unsigned>    n_objetos;          /* nº de objetos a almacenar en cada instancia */
    vector<unsigned>    C;          /* capacidad máxima de cada contenedor */
    vector<unsigned>    mejor;              /* mejor nº mínimo de contenedores usados (m*) */
    vector< vector<unsigned> > tam_objeto;

这是我完整的构造函数:

BPP :: BPP(char fich1[])
{
    ifstream file1; string str; unsigned a, b, c, d;
    file1.open(fich1);
    if (file1.is_open()){ 
        file1 >> (unsigned &) n;
        for (unsigned k = 0 ; k < n ; ++k){
            getline(file1, str); nombre_instancia.push_back(str);
            file1 >> a; n_objetos.push_back(a);
            file1 >> b; C.push_back(b);
            file1 >> c; mejor.push_back(c);
            for (unsigned h = 0 ; h < a ; ++h){
                file1 >> d; tam_objeto[k].push_back(d);
            }
        }
    }
    file1.close();
}

fich1 中的前 5 行是:

10
 P_0 /*Notice the space in the beginning of the line, and in the end*/
150 120 52
30
34

并且输出是读取的所有值都是 0(如果无符号)或“”(如果是字符串)

4

1 回答 1

1

10问题是后面的换行符被消耗:

file1 >> (unsigned &) n; // Why the cast here?

这意味着该getline(file1, str)调用仅读取换行符,即空行。接下来的输入操作是:

file1 >> a;

失败是因为P_0不是有效的unsigned int. 此故障会阻止从file1流中进行任何进一步的读取(其故障已设置)。要解决这个问题,您可以简单地调用getline()两次,忽略第一次调用的结果。

检查所有读取的结果以检测失败。这样做会提醒您读取失败。

于 2012-10-22T20:55:20.190 回答