コードに多くの問題があります。
stringstream stringstreamFirst(line);
変数を使用しておらずstringstreamFirst
、line
この時点では空です。
Album anAlbum(artistName,albumTitle,trackVector);
この回線には多くの問題があります。
- 間違った値を使用しています。
最初の行の1つartistName
、、、albumTitle
およびTrackVector
は空です。最終的に新しいアルバムに出くわしたとき、、、artistName
およびalbumTitle
はTrackVector
前のアルバムのものであり、現在のアルバムのものではありません。値は、アルバムのトラックに到達するまでに正しいですが、新しいアルバムオブジェクトを作成する場合はそうではありません。
- それは間違った場所にあります。
配置されると、このステートメントはAlbum
入力ファイルの各行にオブジェクトを作成します。新しいアルバムオブジェクトを作成する適切な場所は、入力ファイルで新しいアルバムエントリに遭遇したときです。
stringstream stringstreamNew(line);
stringstream stringstreamNewNew(line);
なぜ複雑な名前で、なぜ2つの変数が必要なのですか?別の方法は、ループstringstream
の最初の行として作成された1つだけを使用することです。while
if(!(line [8] =='-'))
else if(line [8] =='-')
このようにブール条件を複製しないでください。あなたが意味するならelse
(それはあなたが意味することです)、ただ使用してelse
ください。この行は、アルバムエントリまたはトラックエントリのいずれかです。他には何もありません。
else//これらの行がありません
エラー処理はありません。おそらくアルバムエントリであるはずのもの、またはおそらくトラックエントリであるはずのものを解析できない場合はどうなりますか?
あなたがする必要があること(擬似コード):
while (getline(istr, line)) {
stringstream linestream (line);
if (line looks like an album line) {
if (not the first line in the file) {
// Create an album using the artist name, album title, and track vector
// and add this album onto the vector of albums
}
// Parse the line for artist name and album title, preferably handling errors
// Clear the trackVector that now pertains to the previous album
}
else {
// Parse the line for track duration and name, preferably handling errors
// Add the track to the track vector.
}
}
// Create an album to cover the last album plus set of tracks