그래서이 질문에 대한 답을 찾으러 여기를 둘러 보았지만 해결 방법 중 아무 것도 나에게 도움이되지 못했습니다. Rolo.h에서오버로드시 정의되지 않은 참조 오류
#include "Rolo.h"
#include "RoloHeader.h"
#include "RoloParsedRecord.h"
#include "RoloRawRecord.h"
std::ostream& operator <<(std::ostream& outstream, const Rolo& rolo){
string roloData = rolo.toString();
outstream << roloData;
return outstream;
}
std::ostream& operator <<(std::ostream& outstream, const RoloHeader& roloHeader){
string roloHeaderData = roloHeader.toString();
outstream << roloHeaderData;
return outstream;
}
std::ostream& operator <<(std::ostream& outstream, const RoloParsedRecord& rpRecord){
string rpRecordData = rpRecord.toString();
outstream << rpRecordData;
return outstream;
}
std::ostream& operator <<(std::ostream& outstream, const RoloRawRecord& rrRecord){
string rrRecordData = rrRecord.toString();
outstream << rrRecordData;
return outstream;
}
: 그것이하여 Main.cpp에라고
friend ostream& operator <<(ostream& outputStream, const Rolo& rolo);
friend ostream& operator <<(ostream& outputStream, const RoloHeader& roloHeader);
friend ostream& operator <<(ostream& outputStream, const RoloParsedRecord& rpRecord);
나는 별도의 클래스 "Operators.cpp"정확한 코드는 다음과 같다에서 운영자 < <를 오버로드 로 : 나는 그것을 컴파일하면
Rolo theRolo;
theRolo.readRolo(inStream); //no issues here
theRolo.sortRolo(sortTag); //no issues here either
outStream << theRolo.toStringFormatted(); //prints out exactly as wanted, no issues
outStream << theRolo; //this is where it chokes
, 내가 얻을 :
Main.o: In function `main':
Main.cpp:(.text.startup+0x3f9): undefined reference to `operator<<(std::ostream&, Rolo&)'
collect2: error: ld returned 1 exit status
make: *** [Aprog] Error 1
완벽하게 실행되는 다른 클래스가 있습니다. 이 문제는 toStringFormatted() 함수와 반대로 오버로드 된 < <을 사용할 때만 나타납니다.
내 질문은 : 여기에 무슨 문제가 있습니까? 왜 그것이 정의되지 않습니까? 그리고 가장 중요한 것은 그것을 해결하기 위해 무엇을 할 수 있습니까?
그게 전부입니다. 나는 그것이 그렇게 단순한 무엇인지 깨달았어야했다. 나는 그것을 makefile에 추가해야했다. 많은 감사. – user3029721