C++输出运算符重载

C++ output operator overloading

我想尝试为输出流和自定义 class 文章重载“<<”运算符。

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() << "\n\n" << 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 '<<' : no operator found which takes a right-hand operand of type 'Article' (or there is no acceptable conversion)

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

这个问题看起来很简单,但是,就是这么简单我也想不通到底是怎么回事。

既然您已经发布了真实代码,答案就显而易见了。

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

将函数声明添加到 header。