Abd*_*een -5 c++ compiler-errors class object
我自己正在编写 C++ 整数数组类和一个用于提取子数组的函数,但是在尝试编译我的代码时出现此错误:
“这一行有多个标记 - 没有返回,在函数中返回非空 - 带有 'Array Array::subArr(int, int)'”
(抱歉忘记包含此错误)
- ‘int* Array::subArr(int, int)’ cannot be overloaded
Run Code Online (Sandbox Code Playgroud)
但是为什么不能超载呢?
Array 类的私有数据成员是:
private:
int *arr;
int *subArray;
int *subArr1;
int len;
Run Code Online (Sandbox Code Playgroud)
导致错误的两个公共函数是:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
和
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";
}
Run Code Online (Sandbox Code Playgroud)
如果需要,我可以发送整个课程代码。
这就是它所说的;
没有返回,在返回非空的函数中 - 使用 '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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果if (pos+siz < len)是假的怎么办?
正确,在声明为 return 的函数中,您没有任何要返回的内容int *。那是一个错误。
'int* Array::subArr(int, int)' 不能重载
看代码:
int * subArr(int pos, int siz)
Array subArr(int pos, int siz)
Run Code Online (Sandbox Code Playgroud)
这两个函数仅在返回类型上有所不同。这是不可能的; 参数的数量和/或类型必须有所不同。
无偿的一般建议:
避免,new除非...
delete.(在函数内部分配内存,然后期望调用者再次释放它是内存泄漏的主要来源。)
cout,抛出异常。简而言之,编写 C++,而不是带有类的 C —— 那是三十年前的事了。
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |