代码如下:
#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");
}