我正在用C++编写一个用于矩阵操作的小型矩阵库。然而,我的编译器报错了,而之前却没有。这段代码已经放在书架上六个月了,在此期间我将电脑从Debian 4.0(Etch)升级到了Debian 5.0(Lenny)(g++(Debian 4.3.2-1.1)4.3.2)。然而,在一个使用相同g++的Ubuntu系统上,我遇到了同样的问题。
这是我矩阵类的相关部分:
而且还有“实施”:
这是编译器给出的错误信息:
matrix.cpp:459: 错误:'std::ostream& Math::Matrix::operator<<(std::ostream&, const Math::Matrix&)' 必须只接受一个参数
对于这个错误我有点困惑,但是在过去的六个月里,我一直在做很多Java,所以我的C++有点生疏了。 :-)
这是我矩阵类的相关部分:
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: 错误:'std::ostream& Math::Matrix::operator<<(std::ostream&, const Math::Matrix&)' 必须只接受一个参数
对于这个错误我有点困惑,但是在过去的六个月里,我一直在做很多Java,所以我的C++有点生疏了。 :-)
operator<<
必须在Math
的命名空间中?它似乎应该在全局命名空间中。我同意我的编译器希望它在Math
的命名空间中,但这对我来说没有意义。 - Mark Lakatafriend
关键字来让实现代码能够访问私有(和受保护的)成员变量。例如,你可能想要打印矩阵的所有元素,而这些元素可能是私有的。 - Erik