以下是我的代码。我有3个朋友功能:
#include <iostream>
#ifndef MATRIX_H
#define MATRIX_H
class Matrix
{
friend Matrix operator++(Matrix&);
friend Matrix operator--(Matrix&);
friend ostream& operator<<(ostream&, Matrix&);
private:
int dim;
int** mat;
public:
Matrix(int d);
void set(int, int, int);
int get(int, int);
Matrix operator+(Matrix&);
Matrix operator-(Matrix&);
Matrix operator*(Matrix&);
~Matrix();
};
Matrix operator++(Matrix &m)
{
for (int i = 0; i < m.dim; i++)
{
for (int j = 0; j < m.dim; j++)
{
int val = m.get(i,j);
m.set(i,j,++val);
}
}
return m;
}
Matrix operator--(Matrix &m)
{
for (int i = 0; i < m.dim; i++)
{
for (int j = 0; j < m.dim; j++)
{
int val = m.get(i,j);
m.set(i,j,--val);
}
}
return m;
}
ostream& operator<<(ostream &os, Matrix &m)
{
for (int i = 0; i < m.dim; i++)
{
for (int j = 0; j < m.dim; j++)
{
os << m.get(i,j) << ' ';
}
os<<endl;
}
return os;
}
#endif
关于“m.get(i,j)”并没有抱怨它们,我认为这是一个公共功能......它抱怨“m.dim”,说它不可访问,在运营商&lt; &lt ;,但不是前两个。为什么?
答案 0 :(得分:1)
您只是忘记在所有位置std::
之前添加ostream
。
friend std::ostream& operator<<(std::ostream&, Matrix&);