在向量循环c ++中使用对象方法

时间:2013-11-13 17:14:48

标签: c++ vector

这是我的班级:

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 *>'

我不明白为什么

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

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

*(it.getVal())

您可以使用

it->getVal()

(*it).getVal()

接下来,您的向量的类型为std::vector<A*>,但您的迭代器为std::vector<A>::iterator。那不行。我的答案取决于矢量为std::vector<A>。如果是std::vector<A*>,那么您需要额外的解除引用级别:

(*it)->getVal()