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

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条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 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日