[英]Iterator for vector of pointers not dereferencing correctly
這是我的問題:
我有一個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();
}
然后我像這樣使用它:
for(std::vector<AguiWidgetBase*>::const_iterator it = box->getChildBeginIterator();
it != box->getChildEndIterator(); ++it)
{
it->setText("Hello World");
}
我收到這些錯誤:
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
為什么給我這些錯誤?
謝謝
因為迭代器的作用就像一個指針,在這種情況下是一個指向指針的指針。
你需要:
(*it)->setText("Hello World"); // dereference iterator, dereference pointer
有沒有辦法可以更改我的迭代器,使其-> 工作?
不是直接的,但你可以這樣做:
for(std::vector<AguiWidgetBase*>::const_iterator it = box->getChildBeginIterator();
it != box->getChildEndIterator(); ++it)
{
AguiWidgetBase* p = *it;
p->setText("Hello World");
}
正如其他人所指出的,這是因為存儲在向量中的對象是指針,因此您對實際對象有一個額外的間接級別。
您也許可以使用boost::ptr_vector
通過指針收集 AguiWidgets,但使用它們就好像它們是按值存儲的一樣? 我沒有廣泛使用它,但我模糊的回憶是它是這樣工作的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.