小编典典

如何正确重载 ostream 的 << 运算符?

all

我正在用 C 编写一个用于矩阵运算的小型矩阵库。但是我的编译器抱怨,以前没有。这段代码被搁置了 6 个月,在这期间我将计算机从 debian etch
升级到 lenny (g
(Debian 4.3.2-1.1) 4.3.2 ) 但是我在具有相同 g++ 的 Ubuntu 系统上遇到了同样的问题.

这是我的矩阵类的相关部分:

namespace Math
{
    class Matrix
    {
    public:

        [...]

        friend std::ostream& operator<< (std::ostream& stream, const Matrix& matrix);
    }
}

和“实施”:

using namespace Math;

std::ostream& Matrix::operator <<(std::ostream& stream, const Matrix& matrix) {

    [...]

}

这是编译器给出的错误:

matrix.cpp:459: error: ‘std::ostream&
Math::Matrix::operator<<(std::ostream&, const Math::Matrix&)’ 必须只有一个参数

我对这个错误有点困惑,但是在这 6 个月里做了很多 Java 之后,我的 C++ 又变得有点生疏了。:-)


阅读 171

收藏
2022-05-16

共1个答案

小编典典

您已将函数声明为friend.
它不是班级的成员。您应该Matrix::从实施中删除。friend表示指定的函数(不是类的成员)可以访问私有成员变量。您实现该功能的方式就像Matrix是错误的类的实例方法。

2022-05-16