控制到达非 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
.
放在哪里
#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
.