#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)
一段时间以来,我一直在尝试解决此问题,因此请帮助我弄清楚我在网上查找时做错了什么,他们说后者的错误修复起来很复杂。
答案 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;
。