2011-10-28 79 views
2

在表達時編譯錯誤與模板與海灣合作委員會建立,但不是MSVC

error: ‘rdoRuntime::RDOValue::operator-’ cannot appear in a constant-expression

error: ‘&’ cannot appear in a constant-expression

error: template argument 2 is invalid

error: invalid type in declaration before ‘;’ token

在Windows MSVC的編譯器編譯沒有錯誤的代碼。

有什麼問題?我該如何解決?

template <typename ret_type, ret_type (RDOValue::*pOperator)() const, typename OperatorType::Type CalcType> 
class RDOCalcUnary: public RDOCalcUnaryBase 
{ 
friend class rdo::Factory<RDOCalcUnary<ret_type, pOperator, CalcType> >; 
public: 
    enum { calc_type = CalcType }; 
    typedef ret_type (RDOValue::*value_operator)() const; 

    static RDOSrcInfo  getStaticSrcInfo(CREF(RDOSrcInfo::Position) position, CREF(LPRDOCalc) pUnaryCalc); 
    static value_operator getOperation (); 

protected: 
    RDOCalcUnary(CREF(RDOSrcInfo::Position) position, CREF(LPRDOCalc) pOperation); 

private: 
    REF(RDOValue) doCalc(CREF(LPRDORuntime) pRuntime); 
}; 
+3

你能否爲我們粘貼RDOCalcUnary的定義,所以我們知道模板參數應該是什麼?這段代碼對我來說看起來完全沒有意義... – mergeconflict

+0

如果刪除括號會發生什麼?他們不應該被需要,據我所知 –

+0

我刪除了括號,編譯器不再給出錯誤...讓我們看看當我收集整個應用程序時會發生什麼。謝謝。 –

回答

1

當你做對的typedef不使用括號:

typedef RDOCalcUnary<RDOValue, &RDOValue::operator-, OperatorType::OT_ARITHM> RDOCalcUMinus; 

它可以給我。

相關問題