我正在自己编写 c++ 整数数组类和一个用于提取子数组的函数,但是在尝试编译我的代码时出现此错误:
“这条线上的多个标记
- 不返回,在函数中返回非 void
- 使用‘Array Array::subArr(int, int)’”
(很抱歉忘记包含此错误)
- ‘int* Array::subArr(int, int)’ cannot be overloaded
但是为什么不能重载呢?
Array 类的私有(private)数据成员是:
private:
int *arr;
int *subArray;
int *subArr1;
int len;
导致错误的两个公共(public)函数是:
int * subArr(int pos, int siz)
{
if (pos+siz < len)
{
subArr1 = new int[siz];
for (int i=0; i<siz; i++)
{
subArr1[i] = arr[pos];
pos++;
}
return subArr1;
}
}
和
Array subArr(int pos, int siz)
{
if (arr != NULL && (siz + pos) < len)
{
Array sub;
sub.len = siz;
sub.subArray = new int [siz];
for (int i=0; i<siz; i++)
{
sub.subArray[i] = arr[pos];
pos++;
}
return sub;
}
cout<<"Error. Enter a valid index and/or position\n";
}
如果需要,我可以发送整个类(class)代码。
最佳答案
这就是它所说的;
No return, in function returning non-void - with ‘Array Array::subArr(int, int)’"
看代码:
int * subArr(int pos, int siz)
{
if (pos+siz < len)
{
subArr1 = new int[siz];
for (int i=0; i<siz; i++)
{
subArr1[i] = arr[pos];
pos++;
}
return subArr1;
}
}
如果
if (pos+siz < len)
会发生什么?是假的?正确,在声明为返回
int *
的函数中,您没有任何要返回的内容。 .那是一个错误。‘int* Array::subArr(int, int)’ cannot be overloaded
看代码:
int * subArr(int pos, int siz)
Array subArr(int pos, int siz)
这两个函数仅在返回类型上有所不同。这是不可能的;参数的数量和/或类型必须有所不同。
无偿的一般建议:
new
除非...delete
的构造函数中. (在函数内部分配内存然后期望调用者再次释放它是内存泄漏的主要来源。)
cout
,抛出异常。 简而言之,编写 C++,而不是带有类的 C——那是 30 年前的事了。
关于c++ - 自己写c++ "array"类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35728064/