1

我是使用 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, "");
    } 
};

错误是:“'值'未声明”。我需要纠正什么才能用 g++ 编译?感谢帮助

4

1 回答 1

5

你需要使用

this->value

或者

ExprBase<ValueType>::value

因为在这种情况下 base 是一个依赖类型(而 value 是一个非依赖名称)。Visual Studio 通过编译非标准代码来“帮助”您(这实际上非常无用,因为当您使用 g++ 编译相同的代码时,事情就会中断)。

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

于 2012-04-07T09:13:06.267 回答