【问题标题】:Can't call inherited protected generic class members [duplicate]无法调用继承的受保护泛型类成员[重复]
【发布时间】:2012-01-07 12:49:29
【问题描述】:

可能重复:
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/ArithmeticExpressionParser.h|45|错误:“get_token”没有依赖于模板参数的参数,因此“get_token”的声明必须可用 [-fpermissive ]|
  • ./include/ArithmeticExpressionParser.h|25|错误:“令牌”未在此范围内声明|
  • 等等。等等

    我到底做错了什么?

    【问题讨论】:

      标签: c++ templates generics inheritance


      【解决方案1】:

      你需要this-&gt;token

      【讨论】:

      • @IntermediateHacker:查看重复的问题。基本上,编译器不知道token 是一个依赖名称,因此您需要告诉它。
      • 再次感谢。我会投最后一票。
      猜你喜欢
      • 2014-01-30
      • 2016-06-12
      • 2014-06-09
      • 2016-09-24
      • 2018-09-03
      • 1970-01-01
      • 2018-12-27
      • 2012-10-03
      • 2023-03-03
      相关资源
      最近更新 更多