首页 > 解决方案 > 覆盖自定义数组类的运算符/开始/结束

问题描述

对于一个练习,我们必须用各种不同的语言实现一个具有自定义边界的数组,其中一种恰好是 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 工作的人带来任何澄清。我该如何解决这些问题,我对这个数组的实现是否正确?

编辑:不得不删除代码

标签: c++

解决方案


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

'.end' 左侧的错误 C2228 必须具有类/结构/联合

第二组消息告诉您发生这种情况的位置,特别是当您尝试使用innerArray.end. ".end" 左边的东西是innerArray,它没有被声明为classstructunion。(这是一个数组T。)

所以这归结为(C 风格)数组没有成员函数。如果您需要一个“结束”函数,也许您应该查看std::array,它将 C 风格的数组包装在class. (如果要求是覆盖某些函数而不是实现它们,这就是您的讲师可能想到的“数组”。)


推荐阅读