【发布时间】:2011-12-17 02:54:26
【问题描述】:
关于表达式:
typedef RDOCalcUnary<RDOValue, (&RDOValue::operator-), OperatorType::OT_ARITHM> RDOCalcUMinus;
gcc 显示以下错误:
错误:‘rdoRuntime::RDOValue::operator-’不能出现在 常量表达式
错误:'&' 不能出现在常量表达式中
错误:模板参数 2 无效
错误:';' 标记之前的声明类型无效
在 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);
};
【问题讨论】:
-
您能帮我们粘贴
RDOCalcUnary的定义,以便我们知道模板参数应该是什么吗?这段代码在我看来完全没有意义...... -
如果去掉括号会发生什么?据我所知,它们不应该是必需的
-
我删除了括号,编译器不再给出错误......让我们看看当我收集整个应用程序时会发生什么。谢谢。
标签: c++ templates visual-c++ gcc syntax-error