友元函数不能访问私有变量
Friend function can't access the private variables
我正在尝试重载 <<
运算符以显示矩阵,但它说可以访问我的私有成员中的 none。
在我的头文件中,我有:
friend ostream& operator<<(ostream& os, const matrix& out);
对于我的私人会员,我有:
private:
int p_rowSize;
int p_rowSize;
vector<vector<double> > p_matrix;
在我的实现文件中,我有以下代码,但不确定我应该如何让它工作:
ostream& operator<<(ostream& os, const matrix& out)
{
for (int i = 0; i < p_rowSize; i++)
{
for (int j = 0; j < p_colSize; j++)
{
cout << "[" << p_matrix[i][j] << "] ";
}
cout << endl;
}
}
它告诉我 p_colSize
、p_rowSize
和 p_matrix
在这里都是未定义的,但在我写的任何其他函数中都没有。
友元函数可以访问数据成员,但由于它仍然是一个自由函数(而不是成员函数),您需要使用 out.p_rowSize
等指定您要访问的对象
ostream& operator<<(ostream& os, const matrix& out)
{
for (int i = 0; i < out.p_rowSize; i++)
{
for (int j = 0; j < out.p_colSize; j++)
{
os << "[" << out.p_matrix[i][j] << "] ";
}
os << endl;
}
return os;
}
一些注意事项:
- 你应该输出到
os
,而不是 cout
。
- 您忘记了 return 函数中的值,所以我为您添加了
return os;
。
我正在尝试重载 <<
运算符以显示矩阵,但它说可以访问我的私有成员中的 none。
在我的头文件中,我有:
friend ostream& operator<<(ostream& os, const matrix& out);
对于我的私人会员,我有:
private:
int p_rowSize;
int p_rowSize;
vector<vector<double> > p_matrix;
在我的实现文件中,我有以下代码,但不确定我应该如何让它工作:
ostream& operator<<(ostream& os, const matrix& out)
{
for (int i = 0; i < p_rowSize; i++)
{
for (int j = 0; j < p_colSize; j++)
{
cout << "[" << p_matrix[i][j] << "] ";
}
cout << endl;
}
}
它告诉我 p_colSize
、p_rowSize
和 p_matrix
在这里都是未定义的,但在我写的任何其他函数中都没有。
友元函数可以访问数据成员,但由于它仍然是一个自由函数(而不是成员函数),您需要使用 out.p_rowSize
等指定您要访问的对象
ostream& operator<<(ostream& os, const matrix& out)
{
for (int i = 0; i < out.p_rowSize; i++)
{
for (int j = 0; j < out.p_colSize; j++)
{
os << "[" << out.p_matrix[i][j] << "] ";
}
os << endl;
}
return os;
}
一些注意事项:
- 你应该输出到
os
,而不是cout
。 - 您忘记了 return 函数中的值,所以我为您添加了
return os;
。