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。
我想尝试为输出流和自定义 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。