저는 아티스트 이름 (문자열), albumtitle (문자열) 및 트랙 개체 목록을 저장하도록 설계된 앨범 클래스가 있습니다. (벡터). 스트림 기반 출력을 사용하려면 "< <"연산자를 오버로드하려고합니다.벡터에 포함 된 개체 목록을 인쇄 할 때 cout을 사용하려고 시도하고 순서가 잘못되었습니다.
관련 코드는 이것이다 :
순서대로 인쇄해야std::ostream& Album::printTracks (std::ostream &out, std::vector<Track> &t)
{
unsigned int i;
for (i=0; i<t.size(); i++)
out << " " << t.at(i);
return out;
}
std::ostream& operator<< (std::ostream &out, Album &a)
{
out << "Artist name: " << a.artistName << "\n" <<
"Album Title: " << a.albumTitle << "\n" <<
"Tracks: " << a.printTracks(out,a.getTracks());
return out;
}
:
- 아티스트의 이름
- 앨범 제목
- 트랙리스트
대신이 whe를 인쇄합니다.
- 트랙리스트
- 아티스트 이름
- 앨범 타이틀
"트랙 :"메모리 위치 다음에 N 나는 그것을 테스트 데이터를 제공합니다.
Constructor for "Track Class" is:
Track::Track (std::string t, Duration* d)
{
title = t;
duration = d;
}
은 "트랙"클래스 "< <"오버로드 코드는 다음과 같습니다
std::ostream& operator<< (std::ostream &out, Track &t)
{
out << "Title: " << t.title << "\n" <<
"Duration: " << *t.duration << "\n";
return out;
}
그리고 최종 코드를 출력에 사용되는 것은 :
Duration* d = new Duration(3,4,50); //creating duration objects for testing
Duration* d2 = new Duration(5,7,300);
Duration* d4 = new Duration(3,3,50);
Track t1 = Track("Test",d); //creating track objects
Track t2 = Track("Test2",d2);
Track t3 = Track("Test3",d4);
std::vector<Track> tracks; //forming tracks into vector
tracks.push_back(t1);
tracks.push_back(t2);
tracks.push_back(t3);
Album a = Album("Test Artist","Test Album",tracks); //create album object
cout << a << endl; // output album object
궁금 왜 순서 예상대로 인쇄되지 않습니까?
부수적으로, 여러분이 인쇄하고있는 것들을 const 참조로 가져와야합니다. – chris
우리가 적시에 당신을 도울 수 있도록 오류를 재현하는 [SSCCE] (http://www.sscce.org)를 게시하십시오. –
@ Code-Guru 이는 7 개의 다른 파일에 저장되어있는 코드 전체를 제공한다는 것을 의미합니다.이 코드는 문제와 관련이 없지만 올바르게 컴파일하려면 거의 모두 필요합니다. –