2011-03-07 3 views
0

Я написал этот класс. Это не полное описание исходного класса, чтобы сделать мою проблему заявление лаконичным я даю то, что требуетсяОшибка на getValue

template < class T> 
class RB 
{ 
class Child 
{ 
members are Child are 
    T getValue() const , Child* getRightChild() const , Child* getLeftChild() const , void setLeftChild(Child *i_leftChild) , void setRightChild(Child *i_rightChild) 
} 
//Problematic function 
void levelOrder(Child *root); 
}; 

Можете ли вы указать, почему мой компилятор говорит "137 getValue' has not been declared "

template < typename T> 
void RB< T>::levelOrder(Child *root) 
{ 
    std::vector< RB< int>::Child* > vec1 , vec2; 
    vec1.push_back(root); 
     vector< RB< int>::Child* >::iterator vec1start ,vec1end , vec2start, vec2end; 
    while(vec1.size() != 0 && vec2.size() != 0) 
    { 
     vec1start = vec1.begin(); 
     vec1end = vec1.end(); 
     for(; vec1start != vec1end ; ++vec1start) 
     { 
      std::cout<<"\n node value = "<< vec1start->getValue(); 

Я думаю, что я не определен вектор также правильно, мой вектор должен содержать внутренний элемент класса, любая помощь с этим также оценивается

+0

Проверьте форматирование кода (выберите и ctrlk + k), это сделает ваш код разборчивым. – Gareve

ответ

1

Одна из проблем заключается в том, что вы не инициализируете vec1start. Кроме того, почему RB шаблон, если вы никогда не используете аргумент шаблона и только когда-либо используете RB<int>? Ошибка, которую вы получаете, заключается в том, что vec1start - это итератор, который при разыменовании возвращает указатель; таким образом, вам нужно сделать (*vec1start)->getValue(), чтобы сделать то, что вы хотите.

+0

vec1start является intialized для vec1.begin(). Спасибо за помощь, поскольку она решила мою ошибку компиляции. – user258367

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