我的代码:
matrix.h
#include <iostream>
class Matrix {
private:
int row;
int col;
int **array;
public:
Matrix();
friend std::ostream& operator<<(ostream& output, const Matrix& m);
};
matrix.cpp
#include "matrix.h"
#include <iostream>
Matrix::Matrix()
{
row = 3;
col = 4;
array = new int*[row];
for (int i = 0; i < row; ++i)
{
array[i] = new int[col];
}
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
array[i][j] = 0;
}
}
}
std::ostream& operator<<(std::ostream& output, const Matrix& m)
{
output << "\nDisplay elements of Matrix: " << std::endl;
for (int i = 0; i < m.row; ++i)
{
for (int j = 0; j < m.col; ++j)
{
output << m.array[i][j] << " ";
}
output << std::endl;
}
return output;
}
的main.cpp
#include "matrix.h"
#include <iostream>
using namespace std;
int main()
{
Matrix a;
cout << "Matrix a: " << a << endl;
system("pause");
return 0;
}
错误:
我做错了什么? :(
**编辑:我编写了一个问题来提供像Barry建议的MCVE示例,并且还删除了像using namespace std
一样的建议。我仍然得到同样的错误。
答案 0 :(得分:2)
现在你有一个完整的例子,你在这里遗漏了std::
:
friend std::ostream& operator<<(ostream& output, const Matrix& m);
^^^
添加它,一切都编译良好:
friend std::ostream& operator<<(std::ostream& output, const Matrix& m);
答案 1 :(得分:1)
我做错了什么? :(
将语句using namespace std;
放入标题是一种不好的做法,这是有原因的。根据这个:
'ostream':暧昧的符号 'istream':模棱两可的符号
你在某个地方的全局命名空间中声明了istream和ostream。遵循良好做法,输入std::