我正在尝试在代码中使用运算符<<,但出现此错误 operator&<<(std :: ostream&,矩阵) 这是我的代码
#include <iostream>
#include <iomanip>
#include <cassert>
using namespace std;
// A structure to store a matrix
struct matrix
{
int** data; // Pointer to 2-D array that will simulate matrix
int row, col;
};
void createMatrix (int row, int col, int num[], matrix& mat);
int main()
{
int data1 [] = {1,2,3,4,5,6,7,8};
int data2 [] = {13,233,3,4,5,6};
int data3 [] = {10,100,10,100,10,100,10,100};
matrix mat1, mat2, mat3;
createMatrix (4, 2, data1, mat1);
createMatrix (2, 3, data2, mat2);
createMatrix (4, 2, data3, mat3);
cout<<mat1<<endl;
return 0;
}
ostream& operator<< (ostream& output, matrix& mat)
{
for(int i=0; i<mat.row; i++)
{
for(int j=0; j<mat.col; j++)
{
output<<mat.data[i][j];
}
}
return output;
}
我该如何解决这个问题?
答案 0 :(得分:3)
您使用的运算符在使用后定义,因此编译器不知道该运算符当时存在。您需要在使用之前移动运算符的定义,甚至最好在定义或声明main()
之前和struct matrix
之后声明它:
ostream& operator<< (ostream& output, matrix& mat);
注意:它应该使用const引用,因为您无意修改该对象:
ostream& operator<< (ostream& output, const matrix& mat);
这也将使此运算符可以用于临时对象等,而不能用于非const引用。
答案 1 :(得分:0)
这是因为您在声明operator<<(std::ostream&, matrix&)
之前就使用它。
可能的解决方案:
但是,因为输出运算符与matrix
类紧密耦合,为什么不将其声明为该类的朋友呢?这样,您将明确记录输出运算符与类的紧密耦合。
struct matrix
{
int** data; // Pointer to 2-D array that will simulate matrix
int row, col;
// Note the output operator should not modify the object.
// So you can pass it as a const reference in the second parameter.
friend std::ostream& operator<<(std::ostream& output, matrix const& mat)
{
for(int i=0; i < mat.row; ++i) // prefer prefix increment.
{
for(int j=0; j < mat.col; ++j)
{
output << mat.data[i][j] << " ";
}
output << "\n";
}
return output;
}
};