アルバムプロジェクトについてC++の演習を行おうとしています。基本的に、Duration、Track(durationオブジェクト+トラックのタイトル)、Album(アーティストの名前、アルバムのタイトル、Trackオブジェクトのコレクション)、AlbumCollection(Albumオブジェクトのコレクションのみ)の4つのクラスが必要です。可変です。
キーボードから値または指定された値を割り当てることによってすべてのクラスをテストしましたが、それらはすべて機能します。しかし、私が彼らにtxtファイルを読むように頼もうとすると。アルバムcollection.appでループし続け、停止することはありません。私の問題は>>演算子にあり、フェイルビットで何か問題があったかどうかを知っています。しかし、私はこれを修正するために何をすべきか本当にわかりません。
これはDurationオブジェクトの>>演算子です
inline std::istream& operator >> (std::istream& is, Duration& f)
{
char c;
int h,m,s;
if (is >> h >> c >> m >> c >> s){
if (c==':'){
f = Duration (h,m,s);
}
else{
is.clear(std::ios_base::failbit);
}
} else{
is.clear(std::ios_base::failbit);
}
return is;
}
これはTrackオブジェクトの私の>>演算子です
istream& operator>>(istream& is, Track& t){
Duration duration;
char trackTitle[256];
char c1;
if (is>>duration>>c1){
is.getline(trackTitle,256);
t = Track(duration,trackTitle);
}
else{
is.clear(ios_base::failbit);
}
return is;
}
これはAlbumクラスの私の>>演算子です
istream& operator>>(istream& is, Album& album){
char artistName[256];
char albumTitle [256];
vector<Track> trackCollection;
Track track;
is.getline(artistName, 256, ':');
is.getline(albumTitle, 256);
while ((is>>track) && (!is.fail())){
trackCollection.push_back(track);
}
album = Album(artistName,albumTitle,trackCollection);
if (is.eof()){
is.clear(ios_base::failbit);
is.ignore(256,'\n');
}
else{
is.clear();
}
return is;
}
これはAlbumCollectionクラスの私の>>演算子です
std::istream& operator>>(std::istream& is,AlbumCollection& albumCollection){
Album album;
vector<Album>albums;
while (is>>album) {
albumCollection.addAlbum(album);
}
return is;
}
and the format of the input file .txt is:
The Jimi Hendrix Experience: Are you Experienced?
0:03:22 - Foxy Lady
0:03:32 - Highway Chile
Pink Floyd: Dark Side of the Moon
0:01:30 - Speak to Me
0:02:43 - Breathe
それについて私を助けてくれませんか?私は解決するために最善を尽くしましたが、それでも私はこれを行うことができません:(((((
本当にありがとうございました