如何重载间接运算符? (C++)

2023-11-27

我正在尝试创建一个迭代器类作为列表类的成员类,并尝试重载间接运算符 (*) 以访问它指向的列表:

template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
    return ((iter.lstptr)->current)->data;
}

where lstptr是一个指向列表的指针,current是一个指向节点类的指针,节点类包含数据成员data类型的T.

迭代器声明如下:

template<class T>
class list
{
public:
class iterator;
};

template<class T>
class list<T>::iterator
{
//stuff
};

我能够很好地编译重载运算符*的函数定义,但是当我尝试执行以下操作时:

list<int> lst1;
lst1.add(6);
list<int>::iterator IT;
IT = lst1;
//everything above this point compiles fine
int a = *IT; //error here (line fourteen)

我收到的错误表明 我正在使用非法间接寻址,并且 它无法从 list::iterator 转换为 int。这两个错误都发生在第十四行。

有谁知道我做错了什么以及如何正确重载间接运算符?

注意:如果您需要查看更多代码,请告诉我哪一部分,因为我不想将整个代码放在这里,因为它大约有 205 行,其中 204 行(我认为)没有任何错误。


您重载了乘法运算符。取出参数使其成为间接运算符。

template<class T>
T list<T>::iterator::operator*()
{
    return ((this->lstptr)->current)->data;
}

如果您想要类似的代码,您还应该让它返回一个引用*IT = 3;编译。

template<class T>
T& list<T>::iterator::operator*()
{
    return ((this->lstptr)->current)->data;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何重载间接运算符? (C++) 的相关文章

  • 具有可绑定属性的自定义视图未在 Xamarin.Forms SAP 上正确绑定

    我有一个复选框 应该触发按钮的 IsEnabled 事件 但不知何故 应该执行的命令永远不会正确绑定并因此执行 这是 CheckBox xaml cs 控件 中的可绑定属性 public static readonly BindablePr
  • 电话号码的正则表达式,不允许全零

    需要您的正则表达式帮助 我当前的正则表达式是 d 8 最小长度为 8 不允许包含字母 特殊字符和空格 我还想禁止全零 如 00000000 Thanks 该模式应该可以满足您的需求 0 d 8 The 0 部分是负前瞻 将阻止仅输入零 Ex
  • 将 Stream 反序列化为 List 或任何其他类型

    尝试将流反序列化为List
  • 为什么这个函数指针赋值在直接赋值时有效,但在使用条件运算符时无效?

    本示例未使用 include 在 MacOS10 14 Eclipse IDE 上编译 使用 g 选项 O0 g3 Wall c fmessage length 0 假设这个变量声明 int fun int 这无法通过 std touppe
  • 矩阵向量变换

    我正在编写一个代码来制作软件蒙皮器 骨骼 皮肤动画 并且我正处于 优化 阶段 蒙皮器工作得很好 并且在 Core 上 1 09 毫秒内对 4900 个三角形网格与 22 个骨骼进行蒙皮Duo 2 Ghz 笔记本 我需要知道的是 1 有人可以
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • 操纵 setter 以避免 null

    通常我们有 public string code get set 如果最终有人将代码设置为 null 我需要避免空引用异常 我尝试这个想法 有什么帮助吗 public string code get set if code null cod
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • C#中Enum中定义的value__是什么

    What value 可能在这里 value MSN ICQ YahooChat GoogleTalk 我运行的代码很简单 namespace EnumReflection enum Messengers MSN ICQ YahooChat
  • 使用 AdHocWorkspace 会导致“不支持语言‘C#’”。

    在VS2015中使用Microsoft CodeAnalysis CSharp Workspaces的RC2 这段代码会抛出异常 var tree CSharpSyntaxTree ParseText var workspace new A
  • 如何用 C 语言练习 Unix 编程?

    经过五年的专业 Java 以及较小程度上的 Python 编程并慢慢感觉到我的计算机科学教育逐渐消失 我决定要拓宽我的视野 对世界的一般用处 并做一些 对我来说 感觉更重要的事情就像我真的对机器有影响一样 我选择学习 C 和 Unix 编程
  • 系统错误 124 - SHFileOperation 的 ERROR_INVALID_LEVEL

    我在使用时遇到问题SHFileOperation SHFileOperation SHFILEOPSTRUCT https stackoverflow com questions 9191415 shfileoperation shfile
  • 错误左值需要作为赋值C++的左操作数

    整个程序基本上只允许用户移动光标 如果用户位于给定的坐标范围 2 2 内 则允许用户键入输入 我刚刚提供了一些我认为足以解决问题的代码 我不知道是什么导致了这个问题 你能解释一下为什么会发生吗 void goToXY int int 创建一
  • 正确使用“extern”关键字

    有一些来源 书籍 在线材料 解释了extern如下 extern int i declaration has extern int i 1 definition specified by the absence of extern 并且有支
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • 使用 foreach 循环和 XmlNodeList C# 将新节点附加到节点列表

    目前我处理的是这样的XML类型 XML FILE http 20drive google com open id 0By5BxgNi9eGcRldxcEZNU0FDTzQ 参考XML文件 我想检查一个节点 如果找不到该节点 我必须将该节点附
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • 无法使 Polly 超时策略覆盖 HttpClient 默认超时

    我正在使用 Polly 重试策略 并且正如预期的那样 在重试过程中HttpClient达到 100 秒超时 我尝试了几种不同的方法来合并 Polly 超时策略 将超时移至每次重试而不是总计 但 100 秒超时仍然会触发 我读过大约 5 个

随机推荐

  • Ember.js:控制器之间的数据绑定

    我正在尝试将 ApplicationController 绑定到 IndexController 这是我的jsfiddle 总而言之 这是我在应用程序控制器中的绑定 indexIsClickedBinding App indexContro
  • 如何引用 Visual Studio 项目中用户定义段的开头?

    我正在努力转换与 gnu 工具链的 ld 链接的 C 程序 使其编译为 Visual studio 2005 项目 该程序将 data symbol 放在不同的段中并在 初始化阶段它在段之间复制数据 指向的指针 段的开始和结束在 ld 链接
  • 协议术语:消息与数据包

    在实践中 对于采用更高级别协议 例如 TCP IP 之上的协议 通过网络传输的通信最合适的术语是什么 具体来说 我指的是小的二进制数据单元 我在各种客户端 服务器库中都看到过 消息 和 数据包 但我对社区的共识感兴趣 这些绝对是消息 数据包
  • Pyinstaller 和 Pycrypto

    我们最近将 pycrypto 添加到我们一直在开发的项目中 现在我无法在使用 pyinstaller 构建该软件后运行该软件 我在 pyinstaller 中遇到了新软件包的问题 但我无法特别修复这个问题 我在尝试运行构建的软件时遇到的错误
  • 我收到错误:未定义的类“必需”。当尝试使用必需的关键字时

    我收到错误 未定义的类 必需 当尝试使用必需的关键字时 这是代码示例 class Field final int id final String name final bool userEditable final String title
  • 在清单中具有共享用户证书功能的 Windows Phone 8.1 应用程序中出现部署错误

    如果我检查 Windows Phone 8 1 应用程序清单中的 共享使用的证书 功能 我会收到以下错误 错误 DEP0001 意外错误 无法注册包 HRESULT 异常 0x80073CF6 Manifest
  • 如何使用android API从android中获取wifi网络的名称?

    我认为我应该使用 NetworkInterface getDisplayName 我有一些名称 但这个名称与我在选择要连接的网络时看到的名称不同 android net wifi WifiInfo getSSID WifiManager w
  • 为什么 Tuple 或 KeyValueItem 没有 setter?

    我需要一个包含一对值的结构 其中的值将被更改 所以我的第一个想法是使用 KeyValueItem 或 Tuple 但后来我发现它们只有一个吸气剂 我不明白为什么 在我的情况下你会用什么 我可以创建自己的类 但是还有其他方法吗 它们是不可变的
  • iOS - 将图像保存为jpg格式

    我的问题是图像保存的格式是什么 是dat还是jpg 这是我使用的代码 NSString urlImage NSString folderPath NSString imageName urlImage componentsSeparated
  • 烧瓶在容器内工作,但当我将其向前移动时却无法工作

    我正在尝试 我正在尝试使用 docker 运行一个简单的 Flask 应用程序 使用this网站作为参考 我的泊坞窗文件 FROM ubuntu latest RUN apt get update y RUN apt get install
  • 如何在 F# 中获取函数参数的名称?

    我可以编写一个返回作为参数给出的函数名称的函数吗 let funName f string returns the name of f 例如 如果我通过printfn作为 funName 的参数 它返回 printfn gt funName
  • 用于单元测试的 EmberJS 服务注入 (Ember QUnit)

    Specs 灰烬版本 1 13 8 节点 0 10 33 npm 2 13 4 I have import Alias from services alias moduleFor controller test Controller tes
  • PostgreSQL的括号规则,有总结指南吗?

    在数学和许多编程语言中 我认为标准SQL也 括号改变优先级 首先对要评估的部分进行分组 或增强可读性 对于人眼 等效示例 SELECT array 1 2 gt array 1 SELECT array 1 2 gt array 1 SEL
  • jQuery 文本到链接脚本? [复制]

    这个问题在这里已经有答案了 有谁知道有一个脚本可以选择对 URL 的所有文本引用并自动将其替换为指向这些位置的锚标记 For example http www google com would automatically turn into
  • 在 Safari iOS 13 + 上禁用双击缩放

    如何在 Safari iOS 13 移动设备上禁用 双击缩放 有时会缩放 有时则不会 我觉得它可能只适用于特定的 HTML 元素 我读到 双击缩放 应该在 iOS 13 上默认禁用 只有捏合缩放才可以工作 但事实并非如此 您可以添加以下元标
  • ReactJS onClick setState 到不同的元素

    我是新来反应的 我遇到了一个小问题 也许有人可以帮助我 所以问题是我无法使用 onCLick 函数触发我想要的元素 现在我试图删除导航 import React from react import ReactDOM from react d
  • jQuery / ajax 上传图像并保存到文件夹

    更新下面的代码 我发现一些代码能够上传图像并显示其缩略图 但是 我也想将图像保存到特定文件夹中 我可以使用什么 jQuery 代码或 ajax 代码将原始图像保存到我选择的文件夹中 这是现场演示 http jsfiddle net dn9S
  • 展平浅嵌套列表的习惯用法:它是如何工作的?

    我在我正在开发的模块中找到了这段代码 l opaque function thingys x for y in l for x in y 我读不懂这个 通过实验 我能够确定它正在展平 2 级嵌套列表 但语法对我来说仍然不透明 它显然省略了一
  • Django REST Framework ValidationError 始终返回 400

    我正在努力强迫ValidationError返回与 400 不同的状态代码 这就是我所做的 class MyValidationError ValidationError status code HTTP 403 FORBIDDEN 然后在
  • 如何重载间接运算符? (C++)

    我正在尝试创建一个迭代器类作为列表类的成员类 并尝试重载间接运算符 以访问它指向的列表 template