有关"<<"操作符重载的问题
大家好,我的同一个项目下的三个文件
//matrix.h
#ifndef MATRIX_H
#define MATRIX_H
#include<iostream>
using namespace std;
class matrix
{
int rows,columns;
int **element;
void init(int rows,int columns);
public:
matrix(int rows=4,int columns=4);
matrix(int* mat,int rows,int columns);
~matrix();
int get(int i,int j);
bool set(int i,int j,int value);
friend ostream& operator<<(ostream &out,const matrix &mat);
matrix& operator+=(matrix &mat);
};
#endif
//matrix_function.cpp
#include"matrix.h"
void matrix::init(int rows,int columns)
{
if(rows<=0||columns<=0)
throw "矩阵行数和列数非正常数";
this->rows=rows;
this->columns=columns;
element=new int*[rows];
for(int i=0;i<rows;++i)
{
element[i]=new int[columns];
for(int j=0;j<columns;++j)
element[i][j]=0;
}
}
matrix::matrix(int rows,int columns)
{
init(rows,columns);
}
matrix::matrix(int* mat,int rows,int columns)
{
init(rows,columns);
for(int i=0;i<rows;++i)
for(int j=0;j<columns;++j)
{
element[i][j]=*(mat+i*columns+j);
}
}
matrix::~matrix()
{
for(int i=0;i<rows;++i)
delete element[i];
delete element;
}
int matrix::get(int i,int j)
{
if(i<rows&&i>=0||j<columns&&j>=0)
return element[i][j];
throw "越界异常";
}
bool matrix::set(int i,int j,int value)
{
if(i<rows&&i>=0||j<columns&&j>=0)
{
element[i][j]=value;
return true;
}
return false;
}
ostream& operator<<(ostream &out,const matrix& mat)
{
out<<"矩阵matrix("<<mat.rows<<"X"<<mat.columns<<") :"<<endl;
for(int i=0;i<mat.rows;++i)
{
for(int j=0;mat.columns;++j)
out<<mat.element[i][j]<<" ";
out<<"\n";
}
return out;
}
matrix& matrix::operator+=(matrix& mat)
{
if(mat.rows==rows&&mat.columns==columns)
{
for(int i=0;i<rows;++i)
for(int j=0;j<columns;++j)
element[i][j]+=mat.element[i][j];
return *this;
}
throw "两个矩阵阶数步一样,无法相加";
}
//matrix.cpp
#include"matrix.h"
#include<iostream>
using namespace std;
int main()
{
const int M=3,N=4;
int table[M*N]={1,5,6,8,4,5};
matrix mat1(table,M,N);
mat1.get(2,2);
int table2[M][N]={1 ,2, 36, 8 ,45, 9};
matrix mat2(&table2[0][0],M,N);
cout<<mat1<<mat2;
mat1+=mat2;
cout<<"两个矩阵相加\n"<<mat1;
return 0;
}
下面是我在vc6.0下的编译结果:
Compiling...
matrix_function.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\DATA STRUCTURE\matrix_function.cpp(62) : error C2248: 'rows' : cannot access private member declared in class 'matrix'
c:\program files\microsoft visual studio\myprojects\data structure\matrix.h(8) : see declaration of 'rows'
C:\Program Files\Microsoft Visual Studio\MyProjects\DATA STRUCTURE\matrix_function.cpp(62) : error C2248: 'columns' : cannot access private member declared in class 'matrix'
c:\program files\microsoft visual studio\myprojects\data structure\matrix.h(8) : see declaration of 'columns'
C:\Program Files\Microsoft Visual Studio\MyProjects\DATA STRUCTURE\matrix_function.cpp(63) : error C2248: 'rows' : cannot access private member declared in class 'matrix'
c:\program files\microsoft visual studio\myprojects\data structure\matrix.h(8) : see declaration of 'rows'
C:\Program Files\Microsoft Visual Studio\MyProjects\DATA STRUCTURE\matrix_function.cpp(65) : error C2248: 'columns' : cannot access private member declared in class 'matrix'
c:\program files\microsoft visual studio\myprojects\data structure\matrix.h(8) : see declaration of 'columns'
C:\Program Files\Microsoft Visual Studio\MyProjects\DATA STRUCTURE\matrix_function.cpp(66) : error C2248: 'element' : cannot access private member declared in class 'matrix'
c:\program files\microsoft visual studio\myprojects\data structure\matrix.h(9) : see declaration of 'element'
Error executing cl.exe.
matrix_function.obj - 5 error(s), 0 warning(s)
要怎么改啊?