在我的程序中,我已经创建了一个名为“Transition”的类。 当我创建一个名为delta_的Transition类型的向量。 当我稍后在我的一个函数实现我已经声明delta_的类时,我尝试使用迭代器,其语法如下:
vector<Transition>::iterator it;
it=this->delta_.begin();
我遇到了这两个错误:
在构造函数`__gnu_cxx :: __ normal_iterator&lt; _Iterator, Container&gt; :: _normal_iterator(const __gnu_cxx :: __ normal_iterator&lt; _Iter,_Container&gt;&amp;)[with _Iter = const Fa :: Transition *, _Iterator = Fa :: Transition *,_ Container = std :: vector&gt;]':
const Fa::Transition* const' to
Fa :: Transition *'无效转换
现在我真的不知道错误在哪里。有人可以帮忙!!
答案 0 :(得分:2)
让我猜一下,您是否正在it=this->delta_.begin();
类的const
方法中进行delta_
,并且it
是该类的成员?
该方法的constness保证类的成员不会更改。但变量iterator
具有非常量类型delta_
,这使得更改成员std::vector
的可能性使保护损坏。
begin()
有两个重载方法iterator begin ();
const_iterator begin () const;
begin()
如果在const
的方法中使用const_iterator
,编译器会调用第二个。{/ p>
所以你需要拒绝方法的constness,或者使用{{1}}。
另一种可能的方法,我不建议因为对象的模糊不变,将你的向量放在堆上并使用指向它的指针进行操作。
答案 1 :(得分:1)
this
或delta_
似乎是const
,导致begin()
返回const_iterator
。