2013-11-25 4 views
1

그래서이 질문에 대한 답을 찾으러 여기를 둘러 보았지만 해결 방법 중 아무 것도 나에게 도움이되지 못했습니다. 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() 함수와 반대로 오버로드 된 < <을 사용할 때만 나타납니다.

내 질문은 : 여기에 무슨 문제가 있습니까? 왜 그것이 정의되지 않습니까? 그리고 가장 중요한 것은 그것을 해결하기 위해 무엇을 할 수 있습니까?

답변

1

어떻게 컴파일하나요? 컴파일하고 별도로 연결합니까? 가능한 작업 : Main.cpp에 Rolo.h를 포함시켜 과부하 된 연산자가 있다고 말합니다. 컴파일됩니다. 그러나 링커는 구현을 찾을 수 없습니다.

+0

그게 전부입니다. 나는 그것이 그렇게 단순한 무엇인지 깨달았어야했다. 나는 그것을 makefile에 추가해야했다. 많은 감사. – user3029721

0

함수를 정의하는 동안 연산자 범위를 작성하지 않았습니다. 그럴 필요가 없습니다. std::ostream& Rolo::operator <<(std::ostream& outstream, const Rolo& rolo)