簡體   English   中英

指針向量的迭代器未正確解引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM