C++定义完Class后为什么用不了?

我当时刚学完C++的Class用法,结果后来却用不了。

代码如下:

#include 
using namespace std;
class test{
    private:
    int size;
    int *arr[];
    public:
    test(int s):size(s){
        for(int i=0;i1;
        }
    }
    ~test(){
        for(int i=0;idelete arr[i];
        }
    }
    int length(){
        return size;
    }
    int operator-(int n){
        return *arr[n];
    }
    int* operator[](int n){
        return arr[n];
    }
    bool operator>(test object){
        return size>object.length();
    }
    bool operator<(test object){
        return sizelength();
    }
};
int main(){
    test a(5);
    test b(10);
    cout<length()<<" "<2]<<" "<-2;
}

谁能帮我解决呀😂

参考GPT和自己的思路:

首先,你定义的数组指针 int *arr[] 没有指定数组的大小,应该改为 int *arr[100]或者 int **arr。另外,在初始化 for 循环中,你应该先为指针分配内存,然后再将地址赋给它,而你的代码却是反过来,导致程序崩溃。以下是修改后的代码:

class test{
    private:
    int size;
    int **arr;
    public:
    test(int s):size(s){
        arr = new int*[s];
        for(int i=0;i<size;i++){
            arr[i] = new int;
            *arr[i]=i+1;
        }
    }
    ~test(){
        for(int i=0;i<size;i++){
            delete arr[i];
        }
        delete[] arr;
    }
    int length(){
        return size;
    }
    int operator-(int n){
        return *arr[n];
    }
    int* operator[](int n){
        return arr[n];
    }
    bool operator>(test object){
        return size>object.length();
    }
    bool operator<(test object){
        return size<object.length();
    }
};

此外,在 main 函数中输出 a[2] 应该改为 *a[2],因为 a[2] 返回的是指向 int 类型的指针,需要用 * 访问其指向的值。最后注意在程序结束时释放动态分配的内存。完整代码如下:

#include <iostream>
using namespace std;

class test{
    private:
    int size;
    int **arr;
    public:
    test(int s):size(s){
        arr = new int*[s];
        for(int i=0;i<size;i++){
            arr[i] = new int;
            *arr[i]=i+1;
        }
    }
    ~test(){
        for(int i=0;i<size;i++){
            delete arr[i];
        }
        delete[] arr;
    }
    int length(){
        return size;
    }
    int operator-(int n){
        return *arr[n];
    }
    int* operator[](int n){
        return arr[n];
    }
    bool operator>(test object){
        return size>object.length();
    }
    bool operator<(test object){
        return size<object.length();
    }
};

int main(){
    test a(5);
    test b(10);
    cout<<a.length()<<" "<<*a[2]<<" "<<a-2;
    return 0;
}

参考GPT和自己的思路:

你的代码有一些问题,导致无法正常运行。

首先,在类的私有成员变量中,你定义了一个指向指针的数组。这个数组没有指定大小,所以数组的大小是未定义的。你需要为这个数组指定一个大小,比如改成int* arr[10],其中10是一个固定的整数,代表数组的大小。

其次,在构造函数中,你对数组进行了赋值,但是数组中的指针并没有初始化。你需要为数组中的每个指针分配内存空间,比如改成arr[i] = new int(i+1)

最后,在使用类的成员函数和运算符重载时,你需要使用对象名或对象指针来调用这些函数和运算符。比如,a.length()应该改成a.length()a[2]应该改成*(a[2])a-2应该改成a.operator-(2)

修改后的代码如下:

#include <iostream>
using namespace std;

class test{
    private:
    int size;
    int* arr[10];
    public:
    test(int s):size(s){
        for(int i=0;i<size;i++){
            arr[i] = new int(i+1);
        }
    }
    ~test(){
        for(int i=0;i<size;i++){
            delete arr[i];
        }
    }
    int length(){
        return size;
    }
    int operator-(int n){
        return *(arr[n]);
    }
    int* operator[](int n){
        return arr[n];
    }
    bool operator>(test object){
        return size>object.length();
    }
    bool operator<(test object){
        return size<object.length();
    }
};

int main(){
    test a(5);
    test b(10);
    cout<<a.length()<<" "<<*(a[2])<<" "<<a.operator-(2);
    return 0;
}

希望能够解决你的问题。记得在学习C++时,要认真阅读文档和书籍,尝试理解每一个概念和语法,并通过实践来加深理解。加油!

构造函数也不行,arr都没分配空间就赋值啊


#include <iostream>
using namespace std;
class test{
    private:
    int size;
    int *arr;
    public:
    test(int s):size(s){
        arr = new int[size];
        for(int i=0;i<size;i++){
            arr[i]=i+1;
        }
    }
    ~test(){
        delete []arr;
        }
    int length(){
        return size;
    }
    int operator-(int n){
        return arr[n];
    }
    int operator[](int n){
        return arr[n];
    }
    bool operator>(test object){
        return size>object.length();
    }
    bool operator<(test object){
        return size<object.length();
    }
};
int main(){
    test a(5);
    test b(10);
    cout<<a.length()<<" "<<a[2]<<" "<<a-2;
    system("pause");
}