c++输出操作符重载

C++ output operator overloading

本文关键字:重载 操作符 输出 c++      更新时间:2023-10-16

我想尝试为输出流和自定义类Article重载"<<"操作符。

my.h

#include <iostream>
using namespace std;
class Article {
    string body;
    string header;
    string author;
public:
    Article();
    void addHeader(const string&);
    void addBody(const string&);
    string getHeader();
    string getBody();
};

my.cpp

string Article::getHeader() {
    return header;
}

void Article::addBody(const string& body) {
    this->body = body;
}
void Article::addHeader(const string& header) {
    this->header = header;
}
ostream& operator<<(ostream& os, Article& article) {
    return os << article.getHeader() << "nn" << article.getBody();
}

main.cpp

#include <iostream>
#include <string>
#include "my.h"
void main() {
    char bye;
    Article article = Article();
    article.addBody("This is my article! thank you!");
    article.addHeader("Header");
    cout << article.getHeader() << "n";
    cout << article.getBody() << "n";
    cout << article;
    cin >> bye;
}

这段代码无法编译。VS 2013说:

binary '<<':没有找到右操作数为'Article'类型的操作符(或者没有可接受的转换)

如果我删除最后一行,它将成功编译,并且getHeader()和getBody()的输出与预期一致。它们都返回字符串,所以应该是小菜一碟。

这个问题看起来很简单,然而,就这么简单,我就是搞不懂是怎么回事

既然你已经发布了真正的代码,答案是显而易见的。

你在my.cpp中定义了你的operator <<,但是你没有在my.h中声明它,所以当编译main.cpp时,编译器无法知道它的存在。

在头文件中添加函数声明