Итак, я посмотрел сюда, чтобы получить ответы на этот вопрос, но ни один из решений не работал для меня. Я перегружен оператор < < в отдельный класс «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().
Так что мой вопрос: что здесь происходит? Почему это не определено? И, что самое важное, что я могу сделать, чтобы исправить это?
Именно так. Я должен был понять, что это так просто. Мне пришлось добавить его в make-файл. Большое значение. – user3029721