如何使用GNU C++引用继承类的字段?

rei*_*hed 1 c++ templates

我是用g ++编译的新手.但如果我使用visual studio,可以使用以下代码.

template <typename ValueType>
class ExprBase {
private:
    ExprBase () {}
protected:
    ValueType value;

public:
    explicit ExprBase (const ValueType& v) : value(v) {}

    virtual Value<ValueType> operator () (const map<const char*, ValueType>& values) const {
        return Value<ValueType>(ValueType(), "");
    }
};

template <typename ValueType>
class Const : public ExprBase<ValueType> {
public:
    Const (const ValueType& v) : ExprBase<ValueType>(v) {} 

    virtual Value<ValueType> operator () (const map<const char*, ValueType>& values) const {
        return Value<ValueType>(value, "");
    } 
};
Run Code Online (Sandbox Code Playgroud)

错误是:"'值'未声明".我有什么要纠正才能用g ++编译?感谢帮助

Stu*_*etz 5

你需要使用

this->value
Run Code Online (Sandbox Code Playgroud)

要么

ExprBase<ValueType>::value
Run Code Online (Sandbox Code Playgroud)

因为在这个实例中,base是一个依赖类型(而value是一个非依赖名称).Visual Studio通过编译非标准的代码"帮助"你(这实际上是非常无用的,因为当你用g ++编译相同的代码时,事情会破裂).

有关更多信息,请参阅C++模板的第136-8页:Vandevoorde和Josuttis的完整指南.