我想尝试重载"<<"输出流和自定义类文章的运算符。
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()的输出符合预期。他们都返回字符串所以它应该是一块蛋糕。
这个问题看起来非常简单,但很简单,我无法弄清楚发生了什么。
答案 0 :(得分:2)
现在您已发布实际代码,答案显而易见。
您在my.cpp中定义了operator <<
,但是您没有在my.h中声明它,因此在编译main.cpp时,编译器无法知道它是否存在。
在标题中添加函数声明。