2013-11-25 37 views
1

所以我在這裏尋找這個問題的答案,但沒有解決方案爲我工作。我已經重載操作< <在一個單獨的類「Operators.cpp」的確切代碼如下:超載時出現未定義的引用錯誤

#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; 
} 

在Rolo.h:

friend ostream& operator <<(ostream& outputStream, const Rolo& rolo); 
friend ostream& operator <<(ostream& outputStream, const RoloHeader& roloHeader); 
friend ostream& operator <<(ostream& outputStream, const RoloParsedRecord& rpRecord); 

這就是所謂在Main.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)

相關問題