0

我试图重载<<运算符以显示矩阵,但它说我的私有成员都无法访问。

在我的头文件中,我有:

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_rowSizep_matrix在这里都是未定义的,但在我编写的任何其他函数中都没有。

4

1 回答 1

3

友元函数可以访问数据成员,但由于它仍然是自由函数(而不是成员函数),因此您需要使用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 os;为你添加了。
于 2020-10-07T00:07:07.743 回答