求高手帮帮小弟,这个程序错在哪里了?(关于c++的模板类和运算符重载)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求高手帮帮小弟,这个程序错在哪里了?(关于c++的模板类和运算符重载)相关的知识,希望对你有一定的参考价值。

#include<iostream.h>
#include<iomanip>

template <typename Type>
class Matrix;

// 三元组顺序表,存储矩阵中非零元的行、列和非零值。
template <typename Type>
class Triple

public:
friend class Matrix<Type>;
Triple( Type item = Type(0),int i=0, int j=0)

m_ni = i;
m_nj = j;
m_data = item;

private:
int m_ni;
int m_nj;
Type m_data;
;

const int MAXSIZE = 100;
const int ZERO =0;

template <typename Type>
class Matrix

public:
Matrix(int row , int col , int tu);
Matrix()
Matrix<Type> Transpose(); // 转置

template <typename Type>
friend Matrix<Type> operator + (const Matrix<Type> &M, const Matrix<Type> &T); // 两个同型矩阵相加

template <typename Type>
friend ostream & operator << (ostream &out, const Matrix<Type> &M); // 输出对象

template <typename Type>
friend istream & operator >> (istream &in, const Matrix<Type> &M); // 输入对象

private:
int m_nrow; // 矩阵的行数
int m_ncol; // 矩阵的列数
int m_ntotal; // 矩阵的非零元个数
Triple<Type> data[MAXSIZE];
;

template <typename Type>
Matrix<Type>::Matrix(int row, int col, int tu)

int x;
int y;
m_nrow = row;
m_ncol = col;
m_ntotal = tu;
cout<<"请按行序依次输入各非零元的值和行列坐标:"<<endl;
for (int i=0; i<tu; i++)

cout<<"第"<<i+1<<"个非零元:"<<endl;
cout<<"行号:";
cin>>y;
while (y<1 || y>row)

cout<<"所输入的值不合法,请重新输入!"<<endl;
cin>>y;

data[i].m_ni = y;

cout<<"列号:";
cin>>x;
while (x<1 || x>col)

cout<<"所输入的值不合法,请重新输入!"<<endl;
cin>>x;

data[i].m_nj = x;
cout<<"非零元的值:";
cin>>data[i].m_data;

cout<<"稀疏矩阵已经输入完毕!"<<endl;


template <typename Type>
Matrix<Type> Matrix<Type>::Transpose()

Matrix<Type> T;
T.m_ncol = this->m_nrow;
T.m_nrow = this->m_ncol;
T.m_ntotal = this->m_ntotal;
if (T.m_ntotal!=0)

int q=0;
int c;
int t;
for (c=1; c<=m_ncol; c++)

for ( t=0; t<m_ntotal; t++ )
if (data[t].m_nj == c)

T.data[q].m_ni = data[t].m_nj;
T.data[q].m_nj = data[t].m_ni;
T.data[q].m_data = data[t].m_data;
++q;



return T;


template <typename Type>
ostream & operator << (ostream &out, const Matrix<Type> &M)

int q=0;
int i;
int j;
for (i=1; i<=M.m_nrow; i++)

for (j=1; j<=M.m_ncol; j++)

if ((M.data[q].m_ni==i) && (M.data[q].m_nj == j))

cout<<setw(5)<<M.data[q].m_data;
q++;

else
cout<<setw(5)<<ZERO;

cout<<endl;

cout<<endl<<endl;
return out;

还有一部分代码

嗯。。。这个问题我简单说一下:
1:你有可能用的是VC6.0这款比较古董的编译器。它不支持模板定义和实现分离,所以如果是这种情况的话,方案有两个:
a: 换一个高版本的编译器,如VS 2005
b: 如果不换的话,那么将定义和实现都放在类声明里边;就是说都在类体内实现,不要写成一个 *.h 和 *.cpp

2:你写的友元函数,有可能出现一类问题,说是有什么符号找不到? 嗯。这个估计也和VC 6.0 有关系,处理方式一样,也写在类体内。。。

然后在试试,不行的话代码都贴出来,帮你看看。。。
参考技术A 写模版类吗?可以把能编译的代码都贴出来 参考技术B 建议将文件保存在桌面上,试试,我试了没有问题。不知道原因

求解!!Qt,c++高手们快快显身手。。。 帮忙解释一下下面的程序,注释下每行吧,小弟是初学者,拜托!!

#include"mp3window.h" #include<QApplication>
#include<QObject>
#include<QTranslator>

int main(int argc,char **argv)
QApplication app(argc,argv);
QTranslator tas;
tas.load("Chinese.qm");
app.installTranslator(&tas);
mp3window tt;
tt.show();
app.exec();
system("killall -9 mplayer");

#include"mp3window.h" //包含该头文件
#include<QApplication> //包含头文件,qt应用程序的主要头文件
#include<QObject> //包含object类的头文件
#include<QTranslator> //包含qt的翻译家头文件

int main(int argc,char **argv) //main主函数入口
QApplication app(argc,argv); //创建应用程序,名叫app,参数是命令行参数
QTranslator tas; //创建翻译家对象,名叫tas
tas.load("Chinese.qm"); //tas加载中文翻译文件,该文件名叫Chinese.qm
app.installTranslator(&tas); //将上述翻译文件安装到应用程序app上,即翻译该程序
mp3window tt; //建立一个mp3窗口对象,名叫tt
tt.show(); //将tt显示出来
app.exec(); //运行应用程序app,执行它的事件循环
system("killall -9 mplayer"); //调用系统的命令行参数,结束Mplayer进程
参考技术A 这里面的父函数的功能是什么都不知道,怎么给你注释。

以上是关于求高手帮帮小弟,这个程序错在哪里了?(关于c++的模板类和运算符重载)的主要内容,如果未能解决你的问题,请参考以下文章

请问c++这个程序中总显示着else与if不匹配,请问大家错在哪里了?

关于概率算法的问题,不知道逻辑错在哪里,求debug

请C语言高手告诉我我错在哪里?

易语言7z压缩解压模块使用方法! 不知道错在哪里了!求详细说明!大牛们谢谢了

关于MATLAB自己编程求解特征值的问题?(比如QR法,幂法,牙可比跌代法,等)请教高手

请问一下python程序代码错在哪里了,谢谢。是通过二分法求方程根的函数