[英]c++ MACRO undeclared identifier on dynamic variable
我試圖從c ++中的循環中的計數器變量構建動態字符串,當時我正在考慮簡單的macro
。
像這樣的東西:
// its enum element string LOCAL_1, LOCAL_2 .....
#define CREATE_STR(N) LOCAL_##N
int ii =1;
for(;ii<=COLS_NUMBERS_PER_WINDOW;)
{
pGameObj->IniGameObj(pMainWindowObjCenter,
CREATE_STR(ii),
Z,
ii);
GameVector.push_back(pGameObj);
ii++;
}
但這給了我編譯器錯誤
error C2065: 'LOCAL_ii' : undeclared identifier
還有其他從動態變量構建動態字符串的好方法嗎? 我可以使用c ++ 11。
更新:
我想我只需要這個:
枚舉C ++按索引獲取
很難說出您要做什么。 但是我猜測您有類似enum { LOCAL_1, LOCAL_2, ...
,並且您想將ii
轉換為這些符號。
您肯定無法使用預處理器執行此操作。 ii
的值甚至在編譯時都不知道,並且因為預處理器甚至在此之前就已發生,所以您最好的辦法就是簡單的文本替換,這使得無法將ii
用作您想要的變化表達式。
您必須在運行時進行擴展,例如@ Jarod42建議( "LOCAL_" + std::to_string(ii)
),但隨后剩下的是字符串。 從那時起,編譯器就忘記了LOCAL_1
符號。
回到平方1,如何將ii
轉換為LOCAL_xx
? 我建議以下內容:
如果LOCAL_xx
是一個枚舉,則只需將枚舉常量分配給要從ii
轉換的值。
enum {
LOCAL_1 = 1,
LOCAL_2 = 2,
};
現在, ii
和LOCAL_xxx
之間基本上沒有區別。 無需轉換。
如果LOCAL_xx
不是整數常量,則需要自己構造映射。 例如,使用std::map<int, LOCAL_xxx>
或大的switch語句。
您可以使用類似
const GameObjectTypeLocation locals[COLS_NUMBERS_PER_WINDOW] = {
LOCAL_1, LOCAL_2, LOCAL_3
};
for (int ii = 1; ii <= COLS_NUMBERS_PER_WINDOW; ++ii)
{
pGameObj->IniGameObj(pMainWindowObjCenter, locals[ii - 1], Z, ii);
GameVector.push_back(pGameObj);
}
如果LOCAL_1
, LOCAL_2
遵循邏輯,則可以將int
直接轉換為enum
。
for (int ii = 1; ii <= COLS_NUMBERS_PER_WINDOW; ++ii)
{
// Assuming LOCAL_1 = 0, LOCAL_2 = 1, ...
pGameObj->IniGameObj(pMainWindowObjCenter, GameObjectTypeLocation(ii - 1), Z, ii);
GameVector.push_back(pGameObj);
}
注意:
enum GameObjectTypeLocation { LOCAL_1, LOCAL_2};
LOCAL_1
為0
, LOCAL_2
為1
,..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.