0

c++ MACRO singletone function result に設定するのに問題があります。これは私が持っているものです:

マクロ

#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 に答える