C++:创建嵌套迭代器的实例 class
C++: creating an instance of an iterator nested class
我在命名空间 MYLIB 中有一个名为 OrderedList 的 class。在其中我有一个嵌套的 class 称为迭代器,它将用作 OrderedList class.
的迭代器
以下是我创建 OrderedList 和迭代器的代码片段 classes:
template<class T>
class OrderedList
{
private:
ListNode<T>* head;
ListNode<T>* tail;
int total;
public:
OrderedList(T[],int);
~OrderedList();
void insert(const T&);
void sort(int);
void output();
class iterator
{
private:
ListNode<T>* curr;
int current;
OrderedList& order;
public:
iterator(OrderedList& ord, bool is_end)
{
this->order = ord; //problem is here
if(is_end == false)
{...
我的主要功能片段:
int main()
{
int one[5] = {9,7,5,4,1};
MYLIB::OrderedList<int> odd(one,5);
odd.output();
MYLIB::OrderedList<int>::iterator starter(odd,false);
编译时出现以下错误:
OrderedList.cpp: In instantiation of ‘MYLIB::OrderedList<T>::iterator::iterator(MYLIB::OrderedList<T>&, bool) [with T = int]’:
OrderedList.cpp:215:53: required from here
OrderedList.cpp:47:6: error: uninitialized reference member ‘MYLIB::OrderedList<int>::iterator::order’ [-fpermissive]
iterator(OrderedList& ord, bool is_end)
^
在 C++ 中,引用必须在成员初始化列表中初始化,不能在构造函数体中初始化。
您需要将代码更改为
iterator(OrderList& ord, bool is_end) : order(ord) {
if (is_end == false) {
...
}
}
而不是使用赋值。
对引用的赋值做不同的事情(它分配引用所引用的原始对象)。您无法更改引用的绑定对象。
PS:为什么停在那里而不去if ((is_end == false) == true)
? ;-)
我在命名空间 MYLIB 中有一个名为 OrderedList 的 class。在其中我有一个嵌套的 class 称为迭代器,它将用作 OrderedList class.
的迭代器以下是我创建 OrderedList 和迭代器的代码片段 classes:
template<class T>
class OrderedList
{
private:
ListNode<T>* head;
ListNode<T>* tail;
int total;
public:
OrderedList(T[],int);
~OrderedList();
void insert(const T&);
void sort(int);
void output();
class iterator
{
private:
ListNode<T>* curr;
int current;
OrderedList& order;
public:
iterator(OrderedList& ord, bool is_end)
{
this->order = ord; //problem is here
if(is_end == false)
{...
我的主要功能片段:
int main()
{
int one[5] = {9,7,5,4,1};
MYLIB::OrderedList<int> odd(one,5);
odd.output();
MYLIB::OrderedList<int>::iterator starter(odd,false);
编译时出现以下错误:
OrderedList.cpp: In instantiation of ‘MYLIB::OrderedList<T>::iterator::iterator(MYLIB::OrderedList<T>&, bool) [with T = int]’:
OrderedList.cpp:215:53: required from here
OrderedList.cpp:47:6: error: uninitialized reference member ‘MYLIB::OrderedList<int>::iterator::order’ [-fpermissive]
iterator(OrderedList& ord, bool is_end)
^
在 C++ 中,引用必须在成员初始化列表中初始化,不能在构造函数体中初始化。
您需要将代码更改为
iterator(OrderList& ord, bool is_end) : order(ord) {
if (is_end == false) {
...
}
}
而不是使用赋值。
对引用的赋值做不同的事情(它分配引用所引用的原始对象)。您无法更改引用的绑定对象。
PS:为什么停在那里而不去if ((is_end == false) == true)
? ;-)