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, "");
    } 
};

エラーは次のとおりです:「'value'undeclared」。g ++でコンパイルできるようにするには何を修正する必要がありますか?手伝ってくれてありがとう

4

1 に答える 1

5

あなたが使用する必要があります

this->value

また

ExprBase<ValueType>::value

このインスタンスではベースが依存型であるためです(値は非依存名です)。Visual Studioは、非標準のコードをコンパイルすることでユーザーを「支援」します(g ++で同じコードをコンパイルすると問題が発生するため、これは実際には非常に役に立ちません)。

詳細については、C ++テンプレートのp.136-8:VandevoordeとJosuttisによる完全ガイドを参照してください。

于 2012-04-07T09:13:06.267 に答える