0

这是我的课:

class A
{
public:
    int getVal(){return m_val;};
private:
    int m_val = 1;
}

class B
{
public:
    void print();
private:
    std::vector<A*> m_vA;
}

现在我有

void B::print()
{
    std::vector<A>::iterator it;
for(auto it = m_vA.begin(); it != m_vA.end(); it++) {
    cout << *it.getVal() << endl;
}
}

我得到了这个错误:

error: no member named 'getVal' in 'std::__1::__wrap_iter<A *const *>'

我不明白为什么

谢谢你的帮助

4

1 回答 1

4

有各种各样的问题。首先,您有一个运算符优先级问题。有问题的表达式如下所示:

*(it.getVal())

你可以使用

it->getVal()

或者

(*it).getVal()

接下来,您的向量是 type std::vector<A*>,但您的迭代器是std::vector<A>::iterator。那是行不通的。我的回答取决于向量std::vector<A>。如果是,std::vector<A*>那么您需要额外的取消引用级别:

(*it)->getVal()
于 2013-11-13T17:16:15.360 回答