覆盖自定义Array类的运算符/开始/结尾

时间:2018-06-24 20:40:14

标签: c++

为了进行练习,我们必须使用各种不同的语言来实现具有自定义范围的数组,其中之一恰好是c ++。不幸的是,我从来没有用过c ++,现在正在努力完成它。我相信我已经完成了标题的正确“核心”。这个想法是,用户在模板中指定边界,而类在内部数组的帮助下伪造了边界。专门告诉我们覆盖[]运算符并实现begin()和end()函数。我目前在Visual Studio调试器中停留在以下内容:

Error   C2228   left of '.end' must have class/struct/union 

gcc编译器说:

In file included from Aufgabe1.test.cpp:2:
array.h: In instantiation of 'typename std::__cxx11::list<T>::iterator Array<T, L, H>::begin() [with T = int; int L = -2; int H = 1; typename std::__cxx11::list<T>::iterator = std::_List_iterator<int>]':
Aufgabe1.test.cpp:16:15:   required from here
array.h:29:25: error: request for member 'begin' in '((Array<int, -2, 1>*)this)->Array<int, -2, 1>::innerArray', which is of non-class type 'int [4]'
       return innerArray.begin;
              ~~~~~~~~~~~^~~~~
array.h: In instantiation of 'typename std::__cxx11::list<T>::iterator Array<T, L, H>::end() [with T = int; int L = -2; int H = 1; typename std::__cxx11::list<T>::iterator = std::_List_iterator<int>]':
Aufgabe1.test.cpp:16:15:   required from here
array.h:33:25: error: request for member 'end' in '((Array<int, -2, 1>*)this)->Array<int, -2, 1>::innerArray', which is of non-class type 'int [4]'
       return innerArray.end;
              ~~~~~~~~~~~^~~

简而言之,我无法从这里继续,因为搜索这些错误并不能使到目前为止主要使用java的人得到澄清。我该如何解决这些问题,而我对此Array的实现是否正确?

编辑: 必须删除代码

1 个答案:

答案 0 :(得分:2)

您提到的第一条错误消息很好地解释了该问题:

  

'。end'左边的错误C2228必须具有class / struct / union

第二组消息告诉您这种情况的发生位置,特别是当您尝试使用innerArray.end时。 “ .end”左侧的内容是innerArray,未声明为classstructunion。 (它是T的数组。)

因此,这归结为以下事实:(C样式)数组没有成员函数。如果需要“结束”功能,也许应该考虑使用std::array,它将C样式的数组包装在class中。 (如果要求是覆盖某些功能而不是实现,那么这就是您的老师可能想到的“数组”。)