友元函数不能访问私有变量

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_colSizep_rowSizep_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;
}

一些注意事项:

  1. 你应该输出到 os,而不是 cout
  2. 您忘记了 return 函数中的值,所以我为您添加了 return os;