c++ - 重载运算符 << c++,我正在尝试计算类的元素

标签 c++

我正在编写这段代码

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/

相关文章:

c++ - typedef 只是代码中的字符串替换还是其他内容?

c++ - 绘制同一张卡的问题 C++

c++ - 使用 Microsoft Visual C++ 2010 Express 时出现链接错误 LNK1123

c++ - 将 C DLL 的函数导入 C++ 程序

c++ - OpenGL - 重新绑定(bind)一个已经绑定(bind)的纹理

c++ - 线程安全 MPI 通信

c++ - 在 C 和 C++ 库之间共享变量的困境

c++ - 参数包函数参数可以默认吗?

c++ - GetCursorPos 的问题

c++ - 如何在 C++ 中使用 std::unordered_set?