jma*_*erx 6 c++ iterator vector
这是我的问题:
我有一个std::vector<AguiWidgetBase*>用于跟踪儿童控制的东西.
我有这两个函数来返回迭代器:
std::vector<AguiWidgetBase*>::const_iterator AguiWidgetBase::getChildBeginIterator() const
{
return children.begin();
}
std::vector<AguiWidgetBase*>::const_iterator AguiWidgetBase::getChildEndIterator() const
{
return children.end();
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样使用它:
for(std::vector<AguiWidgetBase*>::const_iterator it = box->getChildBeginIterator();
it != box->getChildEndIterator(); ++it)
{
it->setText("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
Error 3 error C2039: 'setText' : is not a member of 'std::_Vector_const_iterator<_Ty,_Alloc>' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\main.cpp 112
Error 2 error C2839: invalid return type 'AguiWidgetBase *const *' for overloaded 'operator ->' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\main.cpp 112
Run Code Online (Sandbox Code Playgroud)
为什么它会给我这些错误?
谢谢
GMa*_*ckG 23
因为迭代器就像一个指针,在这种情况下是一个指向指针的指针.
你需要:
(*it)->setText("Hello World"); // dereference iterator, dereference pointer
Run Code Online (Sandbox Code Playgroud)
有没有办法可以更改我的迭代器,使其-> 工作?
不是直接的,但你可以这样做:
for(std::vector<AguiWidgetBase*>::const_iterator it = box->getChildBeginIterator();
it != box->getChildEndIterator(); ++it)
{
AguiWidgetBase* p = *it;
p->setText("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10396 次 |
| 最近记录: |