2012-01-07 4 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:重複した質問を参照してください。基本的に、コンパイラは 'token'が従属名であることを知らないので、それを伝える必要があります。 – Xeo

    +0

    もう一度ありがとうございます。私は最後の近くの投票を行います。 – ApprenticeHacker

    関連する問題