我试图通过使用#define
语句来简化我的代码。这是因为它包含大量重复的代码“块”,这些代码不能使用显而易见的替代方法来重复,函数,因为在这些块中,变量需要像在语句中那样#define
声明,例如#define dostuff(name) int name##Variable;
.
代码
#define createBody(name,type,xpos,ypos,userData,width,height) b2BodyDef name##BodyDef;\
name##BodyDef.type = type==@"dynamic"?b2_dynamicBody:b2_staticBody;\
name##BodyDef.position.Set(xpos,ypos);\
name##BodyDef.userData = userData;\
name=world->CreateBody(&name##BodyDef);\
b2PolygonShape name##shape;\
name##shape.SetAsBox(width/ptm_ratio/2,height/ptm_ratio/2);
...并将其应用于以下内容:
createBody(block, @"dynamic", winSize.width*5/6/ptm_ratio, winSize.height*1/6/ptm_ratio, ((__bridge void*)blockspr), blockspr.contentSize.width, blockspr.contentSize.height)
// error appears there: ^
现在我的观点是一切都很好,没有错误,除了一个让我害怕的错误:
预期的不合格 ID
如图所示,它指向 中的第一个括号((__bridge ...
。(该参数通过参数传递userData
给createBody
。)
我知道这段代码远非简单,但由于其他一切正常,我相信必须存在答案。
这是我关于SO的第一个问题,所以如果有任何不清楚或不足的地方,请告诉我!