c++ - 覆盖自定义数组类的运算符/开始/结束
问题描述
对于一个练习,我们必须用各种不同的语言实现一个具有自定义边界的数组,其中一种恰好是 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 工作的人带来任何澄清。我该如何解决这些问题,我对这个数组的实现是否正确?
编辑:不得不删除代码
解决方案
您提到的第一条错误消息很好地解释了该问题:
'.end' 左侧的错误 C2228 必须具有类/结构/联合
第二组消息告诉您发生这种情况的位置,特别是当您尝试使用innerArray.end
. ".end" 左边的东西是innerArray
,它没有被声明为class
、struct
或union
。(这是一个数组T
。)
所以这归结为(C 风格)数组没有成员函数。如果您需要一个“结束”函数,也许您应该查看std::array,它将 C 风格的数组包装在class
. (如果要求是覆盖某些函数而不是实现它们,这就是您的讲师可能想到的“数组”。)
推荐阅读
- reactjs - 警告模式和会话超时
- r - 根据第一个字符将一个列向量分成不同的列
- javascript - 只允许跨多个按钮的一种活动状态
- bash - 测试标准输入是文件还是管道还是 tty
- cron - Docker 服务在 Jenkins 的 deploy-over-SSH 上退出,但手动成功
- node.js - Digital Ocean Apps 找不到 puppeteer 的 chromium 目录
- java - 接口 -> 匿名类
- batch-file - reg.exe add /f 在批处理文件中不起作用,仍然得到提示
- python - @lru_cache 装饰器过多的缓存未命中
- java - 地图
> 转换为字符串映射以设置 Pathways 属性之一