+ -
当前位置:首页 → 问答吧 → 大家看看这个嵌套宏为什么用G++编译不通过(VC可以通过)?

大家看看这个嵌套宏为什么用G++编译不通过(VC可以通过)?

时间:2011-12-07

来源:互联网

请看一下C++代码,用来定义CDatabaseManage类的成员函数UndeleteRec。
在Windows VC环境下编译没有问题,在Linux下G++编译出问题。
报错:[b]error: macro "IMPLEMENT_DBACTION" passed 12 arguments, but takes just 6|[/b]

C/C++ code


//四个参数
#define PARAM4(p1 , p2 , p3 , p4) p1 , p2 , p3 , p4

//类CDatabaseManage的成员函数通用实现宏
#define IMPLEMENT_DBACTION( action , var , act , lock ,unlock , other ) \
DBERROR CDatabaseManage::action( CClientDB* pClient , var )\
{\
    if( IsRemote( pClient ) )\
        return (*pClient)->action( act );\
    CDBState* pState = pClient->GetCommInfo();\
    _ASSERT( pState );\
    if( !pState ) \
        return (*pClient)->FormError(DBERROR_ACCESSDENY);\
    if( !pState->lock )\
        return (*pClient)->FormError(DBERROR_ACCESSDENY);\
    if( other )\
    {\
        pState->unlock;\
        return (*pClient)->FormError(DBERROR_ACCESSDENY);\
    }\
    DBERROR nErr = (*pClient)->action(act);\
    pState->SetMayChangeMembers( *pClient );\
    pState->unlock;\
    return nErr;\
}

#define IMPLEMENT_DBACTION_UNIQUE( action , var , act )\
    IMPLEMENT_DBACTION( action , var , act , WaitUniqueWrite() , StopUniqueWrite() , false )

//使用上述的宏定义定义类CDatabaseManage的UndeleteRec成员函数
IMPLEMENT_DBACTION_UNIQUE( UndeleteRec , PARAM4(CRange* pRange,int32 nCount, uint32 nOrder,uint32 nFlag),PARAM4(pRange,nCount,nOrder,nFlag))


作者: anycell   发布时间: 2011-12-07

自己顶

作者: anycell   发布时间: 2011-12-07