我正在尝试为一个类重载 << 运算符,以模拟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;
}
我将其作为友元函数处理,这样它就可以访问私有变量。
class NumExpr : public Expr {
public:
NumExpr( string v );
string name();
private:
int number;
friend ostream& operator<<(ostream &s, const NumExpr &num);
};
然而我遇到了这个错误
./ast/Expr.cpp: 在函数中 'std::ostream& operator<<(std::ostream&, const NumExpr&)': ./ast/Expr.cpp:50: 错误:没有与 'operator<<' 匹配的候选项 ./ast/Expr.cpp:49: 注意:候选项是: std::ostream& operator<<(std::ostream&, const NumExpr&)
我已经搜索过这个错误,其他人似乎也遇到了类似的问题,但我的情况看起来与他们提供的解决方案相同。我是否做错了一些根本性的事情,还是有一些语法把戏我不知道?
感谢您的帮助!