这是我的班级:
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 *>'
我不明白为什么
感谢您的帮助
答案 0 :(得分:4)
有各种各样的问题。首先,您有运算符优先级问题。有问题的表达方式如下:
*(it.getVal())
您可以使用
it->getVal()
或
(*it).getVal()
接下来,您的向量的类型为std::vector<A*>
,但您的迭代器为std::vector<A>::iterator
。那不行。我的答案取决于矢量为std::vector<A>
。如果是std::vector<A*>
,那么您需要额外的解除引用级别:
(*it)->getVal()