c++ - 自己写c++ "array"类

标签 c++ class object compiler-errors

我正在自己编写 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 ,抛出异常。
  • 使用 nullptr,而不是 NULL。

  • 简而言之,编写 C++,而不是带有类的 C——那是 30 年前的事了。

    关于c++ - 自己写c++ "array"类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35728064/

    相关文章:

    java - 内部类的目的是什么

    javascript - 需要帮助使用 jquery 操作类

    javascript - 使用对象文字表示法创建对象的有效 Javascript 语法是什么?

    c++ - C++ 的文件系统迭代器

    java - 尝试打印 StringBuilder 类型 : "com.jeanlucthumm.poem.Word@7852e922" 时出现奇怪的输出

    Python 使用多个文件从类创建对象

    javascript - 如何通过特定对象键对数组中的值求和?

    c++ - DirectX11 HLSL 着色器未运行

    c++ - 服务应用程序的引用 Microsoft 代码不是线程安全的?

    C++开始和结束不工作