C ++输出运算符重载

时间:2015-09-19 15:32:42

标签: c++ operator-overloading

我想尝试重载"<<"输出流和自定义类文章的运算符。

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说:

  

二进制&#39;&lt;&lt;&# :没有找到哪个操作符采用类型&#39;文章&#39;的右手操作数。 (或者没有可接受的转换)

如果我删除最后一行,它会成功编译,并且getHeader()和getBody()的输出符合预期。他们都返回字符串所以它应该是一块蛋糕。

这个问题看起来非常简单,但很简单,我无法弄清楚发生了什么。

1 个答案:

答案 0 :(得分:2)

现在您已发布实际代码,答案显而易见。

您在my.cpp中定义了operator <<,但是您没有在my.h中声明它,因此在编译main.cpp时,编译器无法知道它是否存在。

在标题中添加函数声明。