-2

これは私のテキストファイルの行がどのように見えるかです:

1 1 10 20 20 50 donut frank 0.75 1.50 100.00

各クラス変数はスペースで区切られます。私のコードは while ループに到達しません。誰かが何が起こっているのか、どうすれば修正できるのか説明できますか?

void load_inventory(vector<Item*> &items, string filename){
  ifstream infile;
  infile.open(filename.c_str());
  istringstream stin;
  string line;
  cout << "WORKS" << endl;
  if(!infile){
    cout << "there was an error opening the file" << endl;
    return;
  }

  while(!infile.eof()){
    cout << "INSIDE THE LOOP" << endl;
    Item* item = new Item();
    getline(infile, line);
    stin.str(line);
    item->setMonth(stin);
    item->setId(stin);
    item->setNum(stin);
    item->setDesired(stin);
    item->setLife(stin);
    item->setVolume(stin);
    item->setName(stin);
    item->setSupplier(stin);
    item->setCost(stin);
    item->setPrice(stin);
    item->setSales(stin);
    items.push_back(item);
    stin.clear();
    stin.seekg(0);
  }
}
4

1 に答える 1

0

Item問題は、実際の値ではなく文字列ストリームを関数に渡していたことです。これを試して:

std::ifstream infile(filename);
std::string line;

int month, id, num, desired, life, volume;
std::string name, supplier;
float cost, price, sales;

while (std::getline(infile, line))
{
    std::istringstream iss(line);
    if (
        iss >> month >> id >> num >> desired >> life >> volume
            >> name >> supplier >> cost >> price >> sales)
    {
        Item* item = new Item();

//    vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        item->setMonth(month);
        item->setId(id);
        item->setNum(num);
        item->setDesired(desired);
        item->setLife(life);
        item->setVolume(volume);
        item->setName(name);
        item->setSupplier(supplier);
        item->setCost(cost);
        item->setPrice(price);
        item->setSales(sales);
//    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        items.push_back(item);
    }
} 

のように、メモリを管理するコンテナを使用する必要があることに注意してくださいstd::unique_ptr。また、Itemクラスのコンストラクターは、値のパラメーターを取る必要があります。

于 2013-10-25T19:16:44.797 に答える