に読んで、最初のステップは、構造体配列にテキストファイルから情報をロードすることです。しかし、プログラムが範囲外のインスタンスに入っていると言って、読み取り/書き込みプロセス中にエラーメッセージが表示されます。だから私は、データベースストレージのためのプログラムを書いている構造体配列
while (!inFile.eof())
{
getline(inFile, dataLine); //saves the line of the file into a string
a[i].name = dataLine.substr(0, 17); // 18
a[i].author = dataLine.substr(19, 33); // 15
a[i].vol = dataLine.substr(35, 60); // 26
a[i].pub = dataLine.substr(62, 77); // 16
a[i].year = dataLine.substr(79, 82); // 4
a[i].price = dataLine.substr(84, 91); // 8
a[i].copies = dataLine.substr(93, 96); // 3
i++; //moves through the array after each line.
count++; //counts how many lines/items there are in the file entered for the program
}
私はこのセクションに問題を絞り込んだが、何が問題になるのか理解できないようだ。
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is 19) > this->size() (which is 0)
Aborted
ここに私が得たエラーメッセージがあります。
まず第一に、[**これは間違っている**:(!inFile.eof()) ''しばらく](https://stackoverflow.com/questions/5605125/why-is-iostreameof- loop-condition-considered-wrong)を使用している。それを修正してください。次に、問題を再現するために必要な入力を含めて、問題を再現する[最小限、**完全な検証可能な例](https://stackoverflow.com/help/mcve)を含めるように質問を更新します。 – WhozCraig
@WhozCraigおそらくエラーの原因です。そのため、ループはファイルの最後に停止していません。 'getline()'は長さ0の文字列を返し、 'dataLine.substr(19、33)'はエラーを返します。 – Barmar