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

时间:2019-02-08 02:15:41

标签: c++ xcode exc-bad-access

#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 */

所以我的问题是在公共“ NewType运算符[]”中,我收到此错误:

Control reaches end of non-void function

如果将return 0放在结尾,则会在类构造函数中出现第二个错误:“ array_ =(NewType *)”:

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

一段时间以来,我一直在尝试解决此问题,因此请帮助我弄清楚我在网上查找时做错了什么,他们说后者的错误修复起来很复杂。

1 个答案:

答案 0 :(得分:0)

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

foreach(postToImport) {
    // @wp_insert_post funk?
    TheMagicImportFunctionINeed(base64(json));
}

没有NewType operator[](size_t i) const { ptr->array_[i]; } 语句。

也许你是说

return

我看不到错误号2

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

但是在少数情况下,您不应在C ++中使用array_ = (NewType*) malloc(maxSize * sizeof(NewType)); 。它分配存储空间,但不调用构造函数。这使malloc成为定时炸弹。最好使用MyArray<std::string>

旁注:

new

将始终推到相同的位置。您需要增加void push_back(NewType item) { array_[size_] = item; } // push_back method

说到size_,它从未被初始化,所以您无法知道size_将在哪里放置array_[size_] = item;