对于练习,我们必须用各种不同的语言实现一个具有自定义边界的数组,其中一个恰好是 c++。不幸的是,我从来没有处理过 c++,现在正在努力完成它。我相信我已经完成了标题的正确"核心"。这个想法是用户在模板中指定边界,类在内部数组的帮助下伪造这一点。我们特别被告知要覆盖 [] 运算符并实现 begin(( 和 end(( 函数。我目前被困在视觉工作室调试器上,说以下内容:
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 的人带来任何澄清。我如何解决这些问题,我的这个数组的实现是否正确?
编辑: 不得不删除代码
您提到的第一条错误消息很好地解释了这个问题:
错误 C2228 左侧的".end"必须具有类/结构/联合
第二组消息告诉您发生这种情况的位置,特别是当您尝试使用innerArray.end
时。".end"左边的东西是innerArray
,它没有声明为class
、struct
或union
。(这是一个T
数组。
因此,这归结为(C 样式(数组没有成员函数的事实。如果你需要一个"end"函数,也许你应该看看std::array,它将C风格的数组包装在一个class
中。(如果要求是覆盖某些函数而不是实现它们,那么这就是您的教师可能想到的"数组"。