求高手帮帮小弟,这个程序错在哪里了?(关于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<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不匹配,请问大家错在哪里了?
易语言7z压缩解压模块使用方法! 不知道错在哪里了!求详细说明!大牛们谢谢了