使用类模板时报了一些错误,求改正。。。

#include <iostream>
using namespace std;
template <typename T>
class array
{
private:
T *A;
int L;
public:
array(int a);
array();
array(array<T> &);
void datain(T a);
friend array<T> operator+(array<T>&a,array<T>&b);
friend int big(array<T>&a,array<T>&b);
void operator=(const array<T>&);
void show();
T average();
~array();
};
template <typename T>
array<T>::array(int a)
{
int c=0;
A=new T[a];
while (c<a)
{
cin>>A[c];
c++;
}
L=a;
}
template <typename T>
array<T>::array()
{
A=NULL; L=0;
}
template <typename T>
array<T>::~array()
{
delete []A;
}
template <typename T>
array<T>::array(array<T> &p)
{
L=p.L;
A=new T[L];
for (int j=0;j<L;j++)
A[j]=p.A[j];
}
template <typename T>
void operator=(const array<T>& p)
{
L=p.L;
A=new T[L];
for (int j=0;j<L;j++)
A[j]=p.A[j];
}
template <typename T>
void array<T>::datain(T a)
{
A[L-1]=a;
}
template <typename T>
friend int big(array<T>&a,array<T> &b)
{
if (a.L>=b.L)
return a.L;
else
return b.L;
}
template <typename T>
friend array<T> operator+(array<T>&a,array<T>&b)
{
array<T> c;
int BIG=big(a,b);
c.L=BIG;
c.A=new T[BIG];
for (int i=0;i<BIG;i++)
{
c.A[i]=a.A[i]+b.A[i];
}
return c;
}
template <typename T>
T array<T>::average()
{
T all=0;
for (int i=0;i<L;i++)
{
all+=A[i];
}
return all/L;
}
template <typename T>
void array<T>::show()
{
for (int i=0;i<L;i++)
cout<<A[i]<<" ";
cout<<endl;
}
int main()
{
array<int> A1(3);
A1.show();
A1.datain(6);
A1.show();
cout<<A1.average()<<endl;
array<int> B(3);
array<int> C;
C=A1+B;
C.show();
return 0;
}图片

0

3个回答

先说下几个明显点的问题吧:
1.所有的<>,<<符号都打错了,可以按Shift+space转换下。
2.友元函数在类外实现的时候不用加friend。
3.“=”赋值运算符重载实现的时候没有加“array::”。
4.重载的+这个函数若是两个长度不相等的array相加就会造成越界,假设b.L为3,a.L为2,那么for循环里面最后会出现c.A[3]=a.A[3]+b.A[3],显然a.A这个数组根本没有这个下标,它最多为a.A[2]。可以用两个循环给要返回的数组赋值,先赋值两个都有元素的位置,再复制另一个里面多余的元素到相应的位置。

0
u010776685
Crazy_Plus 回复YXTS122: 不客气
2 年多之前 回复
YXTS122
YXTS122 template<T>friend array<T> operator++(array<T>&,array<T>&); 刚刚试着改成这样,果然可以运行了,谢谢了!
2 年多之前 回复
u010776685
Crazy_Plus 回复YXTS122: 哦,那问题解决了吧
2 年多之前 回复
YXTS122
YXTS122 <><<这些符号我是特意写成中文下的,我知道要写成英文下。因为用手机提问,所以得这样写,要不然<>这些符号显示不出来
2 年多之前 回复
u010776685
Crazy_Plus 你的big函数里面的if (a.L>=b.L),>和=中间多了个空格!,还有模板类中的友元函数前面要加上template<typename T>,这样就解决所有的问题了
2 年多之前 回复
u010776685
Crazy_Plus 第三条那里应该是array<T>::
2 年多之前 回复
0
YXTS122
YXTS122 你那个跟我的一点关系都没有
2 年多之前 回复
 #include<iostream>
using namespace std;
template <typename T>
class array
{
public:
      T *A;
    int L;
    array(int a);
    array();
    array(array<T> &);
    void datain(T a);
    template<T> friend array<T> operator+(array<T>&a,array<T>&b);
    template<T>friend int big(array<T>&a,array<T>&b);
    void operator=(const array<T>&);
    void show();
    void average();
    ~array();
};
template <typename T>
array<T>::array(int a)
{
    int c=0;
    A=new T[a];
    while (c<a)
    {
        cin>>A[c];
        c++;
    }
        L=a;
}
template <typename T>
array<T>::array()
{
    A=NULL;   L=0;
}
template <typename T>
array<T>::~array()
{
    delete []A;
}
template <typename T>
array<T>::array(array<T> &p)
{
    L=p.L;
    A=new T[L];
    for (int j=0;j<L;j++)
        A[j]=p.A[j];
}
template <typename T>
void array<T>::operator=(const array<T>& p)
{
    L=p.L;
    A=new T[L];
    for (int j=0;j<L;j++)
          A[j]=p.A[j];
}
template <typename T>
void array<T>::datain(T a)
{
    A[L-1]=a;
}
template <typename T>
int big(array<T>&a,array<T>&b)
{
    if (a.L>=b.L)
    return a.L;
    else
       return b.L;
}
template <typename T>
array<T> operator+(array<T>&a,array<T>&b)
{
    int i,x;
    array<T>  c;
    int BIG=big(a,b);
    c.L=BIG;
    c.A=new T[BIG];
    if (a.L<b.L)
         x=a.L;
    else if (a.L>=b.L)
         x=b.L;
    for (i=0;i<x;i++)
    {
        c.A[i]=a.A[i]+b.A[i];
    }
    if (a.L<b.L)
         for (;i<b.L;i++)
              c.A[i]=b.A[i];
     else if (a.L>=b.L)
          for (;i<a.L;i++)
               c.A[i]=a.A[i];
    return c;
}
template <typename T>
void  array<T>::average()
{
    T all=0;
    for (int i=0;i<L;i++)
    {
        all+=A[i];
    }
    cout<<all/L<<endl;
}
template <typename T>
void array<T>::show()
{
    for (int i=0;i<L;i++)
        cout<<A[i]<<" ";
     cout<<endl;
}
int main()
{
    array<int>A1(3);
    A1.show();
    A1.datain(6);
    A1.show();
    A1.average();
    array<int>B(2);
    array<int>  C;
    C=A1+B;
    C.show();
    return 0;
}
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
birt报表参数日期选择JS文件及操作步骤
看了些帖子,改正了一些错误,细化了一些操作
Revit二次开发--数据库事件
Revit二次开发--数据库事件。改正了书上的一些错误
java计算器(修订)
对上一个版本进行了修订,改正了一些错误,实现了优先级
C# 改错系统
改错系统 ,对系统的出现的一些错误,进行改正
用c++的类模板实现通用堆栈结构
系统的讲述了如何利用类模板去构造数据结构
rational rose Debug
rose2003 出现的一些错误,对于错误改正,需要用到的一件附件下载。
C++采用梯形法和辛普生法求定积分
C++设计采用梯形法和辛普生法求定积分,文档中附带代码,有需要的同学可以下载学习.
java编程运行错误集
java编程中使用hashmap时常见错误及改正
公式类模板
一个公式类模板,分享求指正,解不出来了,暂存在这里,求破解出来。
c++宝贵错误与改正
c++宝贵错误与改正
C语言两个正整数的最小公倍数
求两个正整数之间的最小公倍数,代码是用C语言编写,可以运行
CSerialPort类,支持unicode编码
在原来的CserialPort的基础上进行了一些修改,使其支持Unicode编码,同时改正了原代码在初始化串口时DCB结构体初始化错误的问题。
基于Directshow的摄像头拍照程序
改正了里面的一些错误,可以实现摄像头拍照,并保存
北邮版《通信原理》勘误表
北京邮电大学出版的通信原理有些错误,本文对其中一些做出改正。
模板类友元函数的一个例子
模板类友元函数的一个源代码例子。
初学C语言编程易犯的错误及其改正
初学C语言编程易犯的错误及其改正
cass房檐改正插件
支持调绘时房檐改正,不用在重新绘画房屋,1:500的调绘很是方便!
java 应用开发jar包
使用myeclipse时,有时候会报一些莫名其妙的错误,是少了一些jar包
android简易画图工具
使用android编写的一个画图工具,在以前的基础上修改的,改正了很多错误(如橡皮擦功能)
电离层误差计算
通过读取接收机的观测文件与导航文件,采用Klobuchar模型计算单频接收机的电离层延迟误差。
串口api 校验位正确
可以正常使用不会出现校验位设置错误,这个api是反编译serialport类改正的。
json_jar包
改正了不能找到commons-collections.jar文件错误,直接导入不用修改其他东西,直接可以使用
python下载资源
新手下载Python时必备,十分重要,内含我的编程心得,新手可以看一下,如有错误,欢迎大家批评改正
中英文对照—masm编译时错误性息提示 汇编语言
中英文对照—masm编译时错误性息提示 方便一下喜欢汇编的人,里面有一些错误,望牛人帮忙改正。
pMachine v2.3汉化版
在dengjie的语言包基础上修改的,修改了一些语言上的错误和完成了一些他没有汉化完的部分。安装文件已经汉化。改正了一些字体显示问题
MySql常见错误表
这个文本里记载了很多mysql的错误信息以及编号..可以方便的指导数据库报了什么样的错误
学生成绩管理系统的毕业论文
经过三天的精心测试,检测工作已完成,发现了一些错误并改正了,保证了软件的完善性、正确性,到目前为止,我并没有发现逻辑上的错误
学生成绩管理系统毕业论文
经过三天的精心测试,检测工作已完成,发现了一些错误并改正了,保证了软件的完善性、正确性,到目前为止,我并没有发现逻辑上的错误
oracle常见错误及解决方法
oracle常见错误代码,如ORA-XXXX类型的错误及其解决方法
空调类和求长方形面积和周长
空调类和求长方形面积和周长 c++实现 用到了类模板
Cognos C10 Linux安装时 缺失的三个包
没安装缺失包之前 会报有些错 如:libXmu.so.6缺失,使用如下包可解决 libXmu-1.0.2-5.i386.rpm libXp-1.0.0-8.1.el5.i386.rpm openmotif-2.3.1-2.el5.i386.rpm 安装使用 rpm -ivh * 装完以后就可以使用cognos ISSETUP了 祝您成功!
20140927Eclipse错误日志
20140927Eclipse错误日志
ccs调试中报错
ccs在使用过程中可能会出现的错误以及相应的改正方法。
C#串口提取GPS数据
自己编的的,可能有很多错误,大家帮忙改正
c/c++面试题大全
常见的c/c++面试题大全,改正了许多同类资料的错误
夏宇闻书中verilog编写的eeprom程序源代码
按照书上的程序一个个字敲的,并改正了错误的地方
背包九讲(新)
动态规划基础,新背包九讲,改正原错误,最新版
全站仪设站错误内业改正程序设计
全站仪设站错误内业改正程序设计,可用于将错误坐标转换为正确坐标。
cass 自定义符号库完整教程
cass 帮助文件的自定义符号教程。内部有错误,这里将错误改正,别做好详细教程
最新版 大漠 + 通讯控制 程序
最新版 大漠 + 通讯控制 程序 改正程序中发现的错误
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 报了产品经理课程 大数据一些基础概念