在矢量循环 C++ 中使用对象方法

use object method in vector loop c++

本文关键字:对象 方法 C++ 循环      更新时间:2023-10-16

这是我的类:

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

我不明白为什么

感谢您的帮助

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

*(it.getVal())

您可以使用任一

it->getVal()

(*it).getVal()

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

(*it)->getVal()