为了进行练习,我们必须使用各种不同的语言来实现具有自定义范围的数组,其中之一恰好是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的实现是否正确?
编辑: 必须删除代码
答案 0 :(得分:2)
您提到的第一条错误消息很好地解释了该问题:
'。end'左边的错误C2228必须具有class / struct / union
第二组消息告诉您这种情况的发生位置,特别是当您尝试使用innerArray.end
时。 “ .end”左侧的内容是innerArray
,未声明为class
,struct
或union
。 (它是T
的数组。)
因此,这归结为以下事实:(C样式)数组没有成员函数。如果需要“结束”功能,也许应该考虑使用std::array,它将C样式的数组包装在class
中。 (如果要求是覆盖某些功能而不是实现,那么这就是您的老师可能想到的“数组”。)