我发现您的代码存在许多问题。
stringstream stringstreamFirst(line);
您没有使用该变量stringstreamFirst
,line
此时为空。
Album anAlbum(artistName,albumTitle,trackVector);
这条线有很多问题。
- 它使用了错误的值。
第一行 , artistName
,albumTitle
和TrackVector
是空的。当您最终看到一张新专辑时artistName
,albumTitle
、 和TrackVector
是上一张专辑的专辑,而不是当前专辑。当您访问专辑中的曲目时,这些值是正确的——但这不是您想要创建新专辑对象的时候。
- 它在错误的地方。
放置后,此语句为输入文件中的每一行创建一个Album
对象。创建新专辑对象的正确位置是在输入文件中遇到新专辑条目时。
stringstream stringstreamNew(line);
stringstream stringstreamNewNew(line);
为什么使用复杂的名称,为什么需要两个变量?另一种方法是使用 but one stringstream
,创建为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