c++输出操作符重载
C++ output operator overloading
我想尝试为输出流和自定义类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时,编译器无法知道它的存在。
在头文件中添加函数声明
相关文章:
- 重载操作符+:表达式必须是整型或无作用域枚举类型
- 重载操作符
- 如何重载操作符==外模板类使用友元函数
- 重载*操作符,使其在左右两边都工作
- 重载操作符<对于非随机迭代器
- 在c++中重载操作符的时间和原因
- 如何在c++中重载=操作符来通过引用进行复制
- 如何在c++中获取定义为友元的重载操作符的地址
- 使用重载操作符的文件操作表达式没有给出预期的结果
- 重载操作符()
- 重载操作符()并在类内使用
- 类中的重载操作符+
- 定时使用重载操作符
- c++带类的重载操作符
- 用列表容器重载[]操作符
- 重载操作符=
- 任何重载操作符()的静态检测
- 重载操作符以处理类对象
- 在使用另一个类的类中重载操作符==
- 派生类和基类中的重载操作符不同