Jas*_* Hu 4 c++ overloading operator-overloading
我正在尝试重载一个类的<<运算符,以在Java中模拟toString().我有一个NumExpr类,并且有number我要输出的私有变量.所以他们在这里:
NumExpr::NumExpr( string n ) {
number = atoi( n.c_str() );
}
string NumExpr::name() {
return "num";
}
ostream & operator<<(ostream &s, const NumExpr &num) {
s << num.number;
return s;
}
Run Code Online (Sandbox Code Playgroud)
我把它变成了一个友元函数,所以它可以访问私有变量
class NumExpr : public Expr {
public:
NumExpr( string v );
string name();
private:
int number;
friend ostream& operator<<(ostream &s, const NumExpr &num);
};
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误
./ast/Expr.cpp:在函数中?std :: ostream&operator <<(std :: ostream&,const NumExpr&)?:./ some/Expr.cpp:50:错误:不匹配?operator <NumExpr ::数?./ast/Expr.cpp:49:注意:候选人是:std :: ostream&operator <<(std :: ostream&,const NumExpr&)
我一直在寻找这个错误,人们似乎遇到了同样的问题,但我看起来似乎是人们给出的解决方案.我有什么根本性的错误,或者是否有一些我不知道的语法诡计?
谢谢您的帮助!
好的,这是一点点,我可以重现你的问题:
问题是你忘了包含iostream头文件.
加:
#include<iostream>
Run Code Online (Sandbox Code Playgroud)
它应该工作正常:)
编辑:
正如@James Kanze在评论中正确建议的那样,包含就足够了
#include<istream>
Run Code Online (Sandbox Code Playgroud)
因为你真的不需要一切iostream.
包含iostream内部的缺点istream是编译时间略有增加.
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |