2012-04-07 6 views
1

Ich bin ein Anfänger beim Kompilieren mit g ++. Aber es ist ok mit dem folgenden Code, wenn ich Visual Studio verwende.Wie kann ich mit GNU C++ auf Felder einer geerbten Klasse verweisen?

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

Der Fehler ist: "'Wert' nicht deklariert". Was muss ich korrigieren, um mit g ++ kompilieren zu können? Dank für Hilfe

+0

Es kann hilfreich sein, wenn Sie auch die g ++ - Ausgabe veröffentlichen. – Troubadour

Antwort

5

Sie benötigen

this->value 

oder

ExprBase<ValueType>::value 

zu verwenden, da die Basis eine abhängige Art in diesem Fall ist (während Wertes ist ein nicht-abhängiger Name). Visual Studio "hilft" Ihnen dabei, Code zu kompilieren, der nicht standardisiert ist (das ist eigentlich sehr wenig hilfreich, da Dinge dann beim Kompilieren des gleichen Codes mit g ++ kaputt gehen).

Weitere Informationen finden Sie auf S.136-8 von C++ - Vorlagen: The Complete Guide von Vandevoorde und Josuttis.

+1

danke. Es klappt. – reinearthed

Verwandte Themen