Qyee16 2024-05-06 00:05 采纳率: 100%
浏览 6
已结题

C++中奇怪的操作符重写

https://github.com/open-rmf/rmf_traffic/blob/main/rmf_traffic/include/rmf_traffic/Trajectory.hpp

C++中奇怪的操作符重写,哪位知道什么问题?

错误:Trajectory.cpp(801,43): error C2833: “operator const_iterator”不是可识别的运算符或类型

template<typename W>
class Trajectory::base_iterator
{
public:
  operator const_iterator() const;
}

实现:
template<typename SegT>
Trajectory::base_iterator<SegT>::operator const_iterator() const
{
  return _pimpl->make_iterator<const SegT>(_pimpl->raw_iterator);
}
  • 写回答

5条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-05-06 00:05
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这个错误是因为程序中定义了一个无法识别的操作符重载。具体来说,是在Trajectory.cpp文件的第801行第43列,尝试重载了一个名为"operator const_iterator"的操作符或类型,但是编译器无法识别这个操作符或类型。 从代码中可以看出,这个操作符重载的实现使用了模板。它定义了一个名为base_iterator的类模板,其中重载了"operator const_iterator"操作符,但并没有提供具体的返回类型。这可能导致编译器无法识别这个操作符的类型,从而出现了上述错误。 为解决这个问题,操作符重载的实现应该明确指定返回类型,同时确保它与操作符的声明一致。例如,重载的操作符应该是类似于下面这样的形式:
    template<typename SegT>
    class Trajectory::base_iterator {
    public:
        typedef const_iterator iterator_type;
        iterator_type operator const_iterator() const {
            return _pimpl->make_iterator<const SegT>(_pimpl->raw_iterator);
        }
    };
    

    这样就可以明确地指定操作符的返回类型,并确保它与声明一致,避免出现编译错误。 需要注意的是,这只是一个参考示例,实际实现需要根据具体情况进行调整。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月7日
  • 已采纳回答 5月6日
  • 创建了问题 5月6日

悬赏问题

  • ¥15 怎么改成循环输入删除(语言-c语言)
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件
  • ¥15 使用ESP8266连接阿里云出现问题