I am trying to overload the <<
operator to display a matrix, but it says that none of my private members can be accessed.
In my header file, I have:
friend ostream& operator<<(ostream& os, const matrix& out);
and for my private members I have:
private:
int p_rowSize;
int p_rowSize;
vector<vector<double> > p_matrix;
In my implementation file, I have the following code, and am unsure how I am supposed to get it to work:
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;
}
}
It is telling me that p_colSize
, p_rowSize
, and p_matrix
are all undefined here, but not in any other function that I've written.
A friend function has access to the data members, but since it's still a free function (rather than a member function) you need to specify which object you're accessing using out.p_rowSize
, etc.
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;
}
Some notes:
os
, not cout
.return os;
for you.