有关"<<"操作符重载的问题

zyf19830914 2009-06-07 02:33:46
大家好,我的同一个项目下的三个文件
//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)

要怎么改啊?
...全文
53 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyf19830914 2009-06-07
  • 打赏
  • 举报
回复
哦,我又把里面的那个语法错误改过来,貌似行了,谢谢了,我结贴提示说什么分不够啊,
zyf19830914 2009-06-07
  • 打赏
  • 举报
回复
哦,刚放在一起了,编译没有问题 了,但是运行时会出错,哎
ltc_mouse 2009-06-07
  • 打赏
  • 举报
回复
你是这么放一起的吗? 我没有VC6,没有验证...

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)
{
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& operator+=(matrix &mat);
};
zyf19830914 2009-06-07
  • 打赏
  • 举报
回复
放在一起也是不行的,我就是一开始我matrix_function.cpp和matrix.h放在一起的,ltc_mouse 能帮我解决吗?
ltc_mouse 2009-06-07
  • 打赏
  • 举报
回复
把<<重载的实现放在.h中吧,跟声明在一起就行了~
似乎是VC6的一个bug...

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧