c++ - 重载时出现 undefined reference 错误

标签 c++ compiler-errors overloading

所以我四处寻找这个问题的答案,但没有一个解决方案适合我。我在一个单独的类“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() 函数时才会出现此问题。

所以我的问题是:这里出了什么问题?为什么它是未定义的?而且,最重要的是,我能做些什么来修复它?

最佳答案

你如何编译这个?你编译和链接分开吗? 您可能会做什么:您通过包含 Rolo.h 对 Main.cpp 说存在重载运算符。它编译。但是链接器找不到它的实现。

关于c++ - 重载时出现 undefined reference 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20183974/

相关文章:

c++ - 如何强制耦合多态类型和枚举值?

java - 用户定义的包和系统定义的java包在访问静态内容方面有什么区别

java - 使用 JTextField 时无法在内部类错误中引用非最终变量

c++ - 在 C++ 中通过重载构造函数初始化未知类型的变量

c++ - 为什么sub_match和basic_string比较运算符使用额外的字符串拷贝来实现?

java - java 重载的奇怪行为

c++ - 将异构初始化器列表传递给流运算符

c++ - David Lowe 的 SIFT——关于尺度空间和图像坐标的问题(奇怪的偏移问题)

c++ - opengl:旋转椭圆

c - 5.3。为什么编译错误会像指针*一样发生