我正在编写这段代码
ostream& operator <<(ostream& out, Box& B){
return B.l +" "+B.b +" "+B.h +endl;
};
我得到的错误是
Solution.cpp:40:46: error: ‘std::ostream& Box::operator<<(std::ostream&, Box&)’ must have exactly one argument ostream& operator <<(ostream& out, Box& B){ ^
谁能解释一下出了什么问题吗?我不明白。
感谢您的帮助:)
最佳答案
您的意思似乎是以下
std::ostream & operator <<( std::ostream& out, const Box& B) {
return out << B.l << " " << B.b << " " << B.h;
}
前提是操作符中使用的所有数据成员都是Box
类的公共(public)数据成员。运算符应在类定义之外声明和定义。
如果使用的数据成员之一是类的私有(private)数据成员,则该函数应该是该类的友元函数,并且应在类定义中声明(并且可以定义)。例如
class Box
{
//...
friend std::ostream & operator <<( std::ostream& out, const Box& B) {
return out << B.l << " " << B.b << " " << B.h;
}
//...
};
注意,最好在return语句中去掉操作数std::endl
。在这种情况下 1) 运算符将更加灵活,因为您可以在同一行中输出附加信息 2) 此语句
std::cout << box;
不会让代码的读者感到困惑,因为他们看不到操作数 std::endl
。
如果在运算符调用者的运算符定义中没有此操作数,您可以编写
std::cout << box << std::endl;
而且这个说法更加清晰的表达了程序员的意图。
关于c++ - 重载运算符 << c++,我正在尝试计算类的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60988105/