0

我在设置 c++ MACRO 单音函数结果时遇到问题。这就是我所拥有的:

#define CCDICT_FOREACH(__dict__, __el__) \
    CCDictElement* pTmp##__dict__##__el__ = NULL; \
    if (__dict__) \
    HASH_ITER(hh, (__dict__)->m_pElements, __el__, pTmp##__dict__##__el__)

这就是我尝试设置它的方式:

CCDictElement* pElement = NULL;
CCDICT_FOREACH(GameSingleTone::getInstance()->getGemsDictionary(), pElement)
{
}

getGemsDictionary() 方法返回我: CCDictionary*,gemsDictionary;

我得到的编译错误是(在 MACRO 的行上):

error C2143: syntax error : missing ';' before '{'

但如果我这样做:

CCDictionary* tempDictionary = CCDictionary::create();
tempDictionary = GameSingleTone::getInstance()->getGemsDictionary();
CCDICT_FOREACH(tempDictionary , pElement)
{
}

一切正常。
为什么 ?

4

1 回答 1

2

宏只是进行文本替换。所以当你这样做时:

CCDICT_FOREACH(GameSingleTone::getInstance()->getGemsDictionary(), pElement)

这一行:

CCDictElement* pTmp##__dict__##__el__ = NULL; \

变成这样:

CCDictElement* pTmpGameSingleTone::getInstance()->getGemsDictionary()pElement = NULL;

这完全是胡说八道。另一方面,这:

CCDICT_FOREACH(tempDictionary , pElement)

翻译为:

CCDictElement* pTmptempDictionarypElement = NULL;

这完全没问题。

于 2013-08-25T13:18:51.023 回答