控制到达非 void 函数重载运算符 [] 的末尾;

Control reaches end of non-void function overloading operator [];

#ifndef MyArray_hpp
#define MyArray_hpp
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#define MAX_ARRAY_SIZE 1000

using std::cout;
using std::endl;
using std::ifstream;
using std::cout;

//template class
template<typename NewType>
class MyArray
{

public:

    MyArray(size_t maxSize)
    { // constructor

        //(2)
        array_ = (NewType*) malloc(maxSize * sizeof(NewType));

    }

    void push_back(NewType item)
    {
        array_[size_] = item;
    } // push_back method
    class Iterator
    {

    public:

        Iterator(MyArray<NewType>* a, size_t s) :
                ptr(a), index(s)
        {
        }
        //(1) 
        NewType operator[](size_t i) const
        {   ptr->array_[i];}

    private:

        size_t index;
        MyArray<NewType>* ptr;

    };

    Iterator begin()
    {
        return MyArray<NewType>::Iterator(this, 0);
    }
    Iterator end()
    {
        return MyArray<NewType>::Iterator(this, size_);
    }

private:

    size_t size_;
    NewType* array_;

};

#endif /* MyArray_hpp */

所以我的问题是在 public“NewType operator[]”中我得到了这个错误:

Control reaches end of non-void function

如果我将 return 0 放在它的末尾,我会在 class 构造函数中的“array_ = (NewType*)”处出现第二个错误:

 Thread 1: EXC_BAD_ACCESS (code=1, address=0x504805ac0)

我已经尝试修复此问题一段时间了,请帮我弄清楚我做错了什么我在网上查了一下,他们说后一个错误修复起来可能很复杂。

具有 return 类型的函数必须 return 该类型的值。

NewType operator[](size_t i) const { ptr->array_[i]; }

没有return声明。

也许你的意思是

NewType operator[](size_t i) const { return ptr->array_[i]; }

?

我看不到错误编号 2

array_ = (NewType*) malloc(maxSize * sizeof(NewType));

malloc 除了一些罕见的边缘情况外,你不应该在 C++ 中使用它。它分配存储但不调用构造函数。这使得 MyArray<std::string> 成为一颗定时炸弹。更喜欢使用 new.

旁注:

void push_back(NewType item)
{
    array_[size_] = item;
} // push_back method

总是推到同一个地方。您需要递增 size_.

说到 size_,它从未被初始化,所以你无法知道 array_[size_] = item; 会尝试将 item.

放在哪里