gpt4 book ai didi

c++ - 使用 vector 迭代器时遇到的错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:21 25 4
gpt4 key购买 nike

在我的程序中,我创建了一个名为“Transition”的类。当我制作一个名为 delta_ 的 Transition 类型的 vector 时。后来在我声明了 delta_ 的类的一个函数实现中,我尝试使用具有以下语法的迭代器:

vector<Transition>::iterator it;
it=this->delta_.begin();

我遇到了这两个错误:

In constructor `__gnu_cxx::__normal_iterator<_Iterator, Container>::_normal_iterator(const __gnu_cxx::__normal_iterator<_Iter, _Container>&) [with _Iter = const Fa::Transition*, _Iterator = Fa::Transition*, _Container = std::vector >]':

invalid conversion from const Fa::Transition* const' toFa::Transition*'

现在我真的不知道错误在哪里。任何人都可以帮忙!!

最佳答案

让我猜猜,您是否在类的 const 方法中执行 it=this->delta_.begin();delta_ 是类的成员吗?

方法的常量性保证类的成员不会改变。但是变量 it 有非常量类型的 iterator,这使得改变成员 delta_ 的可能性成为可能,这使得保护损坏。

std::vector 有两个重载方法 begin()

iterator begin ();
const_iterator begin () const;

如果在 const 的方法中使用 begin(),编译器会调用第二个。

所以你需要拒绝方法的constness,或者使用const_iterator

另一种可能的方法是将 vector 放在堆上并使用指向它的指针进行操作,因为模糊了对象的常量性,我不推荐这种方法。

关于c++ - 使用 vector 迭代器时遇到的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9756034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com