2013-11-13 3 views
0

Это мой класс:использование метода объекта в векторном петлевой C++

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

Я не 't понять почему

Спасибо за помощь

+0

'(* он) .getVal()' или 'it-> GETVAL()'. [Приоритет оператора] (http://en.cppreference.com/w/cpp/language/operator_precedence). – 0x499602D2

ответ

4

Существуют различные проблемы. Во-первых, у вас есть проблема с приоритетом оператора. Выражение в вопросе читается так:

*(it.getVal()) 

Вы можете использовать либо

it->getVal() 

или

(*it).getVal() 

Далее ваш вектор типа std::vector<A*>, но ваш итератор std::vector<A>::iterator. Это не сработает. Мой анкер зависит от того, что вектор равен std::vector<A>. Если бы это было std::vector<A*> то вам нужен дополнительный уровень де ссылок:

(*it)->getVal() 
+0

Спасибо, решение было (* it) -> getVal() – Ajouve

Смежные вопросы