无法调用继承的受保护泛型类成员

Can't call inherited protected generic class members

本文关键字:受保护 泛型类 成员 继承 调用      更新时间:2023-10-16

可能重复:
访问从模板化父类继承的变量

有这样一类:

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/ArythmeticExpressionParser.h|45|错误:"get_token"没有依赖于模板参数的参数,因此"get_token"的声明必须可用[-fpermission]|
  • /include/ArythmeticExpressionParser.h|25|错误:未在此作用域中声明"token"|
  • 等等。等

    我到底做错了什么?

    您需要this->token