关于《cocos2d-x手机游戏开发》中重构后一个CC_BREAK_IF宏的问题

我在看《cocos2d-x手机游戏开发》这本书的时候,跟着做魔塔游戏的例子,做到代码重构的地方,发现原先在HelloWorldScene.cpp中init()函数创建的一个close的MenuItem,可以用宏CC_BREAK_IF判断是否成功创建,如下:
CCMenuItemImage *pCloseItem = CCMenuItemImage::itemFromNormalImage(
“CloseNormal.png”,
“CloseSelected.png”,
this,
menu_selector(HelloWorld::menuCloseCallback));
CC_BREAK_IF(! pCloseItem);

而将控件重构到一个独立的ControlLayer.cpp中,在该cpp的init()函数中创建一个close的MenuItem,不能用宏CC_BREAK_IF判断了。
如下:
bool ControlLayer::init(void)
{
if (!CCLayer::init())
{
return false;
}
CCMenuItemImage *pCloseItem = CCMenuItemImage::itemFromNormalImage(
“CloseNormal.png”,
“CloseSelected.png”,
this,
menu_selector(ControlLayer::menuCloseCallback));
CC_BREAK_IF(pCloseItem);
}
报错: error C2043: illegal break

这是为什么呢? CC_BREAK_IF在使用时有什么限制吗?

CC_BREAK_IF的宏定义如下:

#define CC_BREAK_IF(cond)            if(cond) break

break需要在while(do…while)、for和switch语句中配合使用,因此会报“illegal break”错误。
因此将CC_BREAK_IF移到do{}while(false); 之中即可。

CC_BREAK_IF的宏定义如下:

#define CC_BREAK_IF(cond)            if(cond) break

break需要在while(do…while)、for和switch语句中配合使用,因此会报“illegal break”错误。
因此将CC_BREAK_IF移到do{}while(false); 之中即可。

学习了。:2::2:

CC_BREAK_IF的宏定义如下:

#define CC_BREAK_IF(cond) if(cond) break

break需要在while(do…while)、for和switch语句中配合使用,因此会报“illegal break”错误。
因此将CC_BREAK_IF移到do{}while(false); 之中即可。 :2: