计算机小混子 2022-05-08 03:27 采纳率: 100%
浏览 24
已结题

编译器报错这bug怎么改?

img

#pragma once
#include <cassert>
//数组类模板定义
template<class T>
class Array {
private:
    T* list;//T型指针,用于存放动态分配的数组内存首地址
    int size;//数组大小(元素个数)
public:
    Array(int sz = 50);//构造函数
    Array(const Array<T>& a);//复制构造函数
    ~Array();//析构函数
    Array<T>& operator = (const Array<T>&rhs);
    const T& operator[](int n)const;
    //重载“=”使数组对象可以整体赋值
    T& opeator[](int i);//重载“[ ]”,使Array对象可以起到C++普通数组的作用
    const T& operator[](int i)const;
    T& operator[](int i);
    //“[ ]”运算符的const版本
    operator T* ();//重载到T*类型的转换,使Array对象可以起到C++普通数组的作用
    operator const T* ()const;//const版
    int getSize()const;//取数组大小
    void resize(int sz);//修改数组大小

};
//构造函数
template<class T>
Array<T>::Array(int sz) {
    assert(sz >= 0);//sz为数组大小,应当非负
    size = sz;//将元素个数赋值给变量size
    list = new T[size];//动态分配size个T类型的元素空间
}

//析构函数
template<class T>
Array<T>::~Array()
{
    delete[]list;
}

//复制构造函数
template<class T>
Array<T>::Array(const Array<T>& a)
{
    //从对象x取得数组大小,并复制给当前对象的成员
    size = a.size;
    //为对象申请内存并进行出错检查
    list = new T[size];//动态分配n个T类型的空间
    //从对象X复制数组元素到本对象
    for (int i = 0; i < size; i++)
        list[i] = a.list[i];
}

//重载“=”运算符,将对象rhs复制给本对象,实现对象间的整体赋值、
template<class T>
Array<T>& Array<T>::operator=(const Array<T>& rhs)
{
    //如果本对象中数组大小与rhs不同。则删除数组原有内存,然后重新分配
    if (size != rhs.size)
    {
        delete[]list;//删除数组原有内存
        size = rhs.size;//设置本对象的数组大小
        list = new T[size];//重新分配n个元素的内存
    }
    //从对象X复制数组元素到本对象
    for (int i = 0; i < size; i++)
    {
        list[i] = rhs.list[i];
    }
    return *this;
}
//重载下标运算符,实现与普通数组一样通过下标访问元素,并具有越界检查的功能
template<class T>
T& Array<T>::operator[](int n)
{
    assert(n >= 0 && n < size);
    return list[n];
}
template<class T>
const T& Array<T>::operator[](int n)const
{
    assert(n >= 0 && n < size);
    return list[n];
}

//重载指针转换运算符,将Array类的对象名转换为T类型的指针,指向当前对象中的私有数组
//因而可以像使用普通数组一样使用Array类的对象名
template<class T>
Array<T>::operator T* ()
{
    return list;
}

template<class T>
Array<T>::operator const T* ()const
{
    return list;
}
//取当前数组的大小
template<class T>
int Array<T>::getSize()const
{
    return size;
}
//将数组大小修改为sz
template<class T>
void Array<T>::resize(int sz)
{
    assert(sz >= 0);
    if (sz == size)
    {
        return;
    }
    T* newList = new T[sz];
    int m = (sz < size) ? sz : size;
    //将原有数组中前n个复制到新数组中
    for (int i = 0; i < n; i++)
    {
        newList[i] = list[i];
        delete[]list;//删除元数组
        list = newList;//使list指向新数组
        size = sz;//更新size;
    }
}

```c++

// 9-3数组类.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

#include <iostream>
#include <iomanip>
#include "Array.h"
using namespace std;
int main()
{
    Array<int>a(10);
    int count = 0;//存储质数的数组,初始状态有10个元素
    int n;
    cout << "Enter a value>=1 as upper limit for prime numbers:";
    cin >> n;
    for (int i = 2; i <= n; i++)
    {
        //检查i是否能被比他小的质数整除
        bool isPrime = true;
        for (int j = 0; j < count; j++)
        {
            if (i % a[j] == 0)//若i被a[j]整除,说明i不是质数
            {
                isPrime = false;
                break;
            }
        }
    //把i写入质数中
        if (isPrime)
        {
            if (count == a.getSize())
                a.resize(count * 2);
            a[count++] = i;
        }
    }
    

}


```

  • 写回答

1条回答 默认 最新

  • 树下等苹果 2022-05-08 09:41
    关注
    1const T& operator[](int i)constconst T& operator[](int n)const;
    两个函数名称相同、参数数量以及类型相同,这需要修改
    2、在
    void Array<T>::resize(int sz)
    函数里面,没有传入n,也没有在在函数内部定义
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 已采纳回答 5月10日
  • 创建了问题 5月8日

悬赏问题

  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch