2012-01-07 3 views
0

Possible Duplicate:
Accessing inherited variable from templated parent classне может вызвать унаследованный защищены общие члены класса

Там в этот класс:

template<typename T> class Parser 
{ 
    public: 
     Parser() : count(0) {} 
     virtual void parse(const string&); 
    protected: 
     virtual void get_token(void); 

     char token; 
     string expression; 
     int count; 
}; 

, и я сделал это производный класс:

#include <sstream> 
#include <cstring> 
#include "Parser.h" 

template <typename T> class ArithmeticExpressionParser : public Parser<T> 
{ 
    public: 
     ArithmeticExpressionParser() : Parser<T>() {} 
    protected: 
     virtual T parse_plus_minus(); 
     virtual T parse_divide_multiply() 
     { 
      T result , temp; 
      result = parse_exponent(); 

      if(this.token == '/') 
      { 
       temp = parse_divide_multiply(); 
       result /= temp; 
      } 

      else if(token == '*') 
      { 
       temp = parse_divide_multiply(); 
       result *= temp; 
      } 

      else if(token == '%') 
      { 
       temp = parse_divide_multiply(); 
       result %= temp; 
      } 

      return result; 
     } 

     /* more code.... */ 

Теперь ошибки я получаю являются :

  • ./include/Arit hmeticExpressionParser.h | 45 | Ошибка : нет аргументов для 'get_token', которые зависят от параметра шаблона, поэтому должно быть доступно объявление 'get_token' [-fpermissive] |
  • ./include/ArithmeticExpressionParser.h | 25 | Ошибка : 'токен' не был объявлен в этой области |
  • и т.д. и т.п.

    Что именно я делаю не так?

    ответ

    3

    Необходимо this->token.

    +0

    +1, почему это необходимо? – ApprenticeHacker

    +0

    @IntermediateHacker: см. Дублированный вопрос. В принципе, компилятор не знает, что 'токен' является зависимым именем, поэтому вам нужно это сказать. – Xeo

    +0

    еще раз спасибо. Я дам последнее закрытое голосование. – ApprenticeHacker