我正在尝试为类重载 << 运算符以在 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<NumExpr::数字?./ast/Expr.cpp:49:注意:候选者是:std::ostream& operator<<(std::ostream&, const NumExpr&)
我已经搜索过这个错误,人们似乎遇到了同样的问题,但我的似乎看起来像人们给出的解决方案。我在做什么从根本上是错误的,或者是否有一些我不知道的语法恶作剧?
谢谢您的帮助!