2012-04-07 11 views
1

我是用g ++編譯的新手。但是,如果我使用visual studio,則可以使用以下代碼。如何使用GNU C++引用繼承類的字段?

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 ++編譯?感謝您的幫助

+0

如果您也發佈了g ++輸出,它可能會有所幫助。 – Troubadour 2012-04-07 09:13:54

回答

5

您需要使用

this->value 

ExprBase<ValueType>::value 

由於基數在這種情況下一個依賴型(而值是一個非從屬名稱)。 Visual Studio通過編譯非標準的代碼來「幫助」你(這實際上是非常無用的,因爲當你用g ++編譯相同的代碼時,事情會中斷)。

欲瞭解更多信息,請參閱C++模板的p.136-8:由Vandevoorde和Josuttis完成的指南。

+1

謝謝。有用。 – reinearthed 2012-04-07 09:15:20