gpt4 book ai didi

c++ MACRO动态变量上未声明的标识符

转载 作者:行者123 更新时间:2023-11-30 01:54:24 25 4
gpt4 key购买 nike

我尝试在 C++ 循环中从计数器变量构建动态字符串,我在考虑简单的

像这样:

// 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。

更新:
我想我只需要这个:
Enum C++ Get by Index

最佳答案

很难说清楚您要做什么。但我猜你有类似 enum { LOCAL_1, LOCAL_2, ... 的东西, 你想转换 ii这些符号。

你绝对不能用预处理器做到这一点。 ii 的值在编译时甚至都不知道,并且因为预处理器甚至在此之前发生,所以您能做的最好的事情就是简单的文本替换,这使得无法使用 ii随心所欲地改变表情。

你必须在运行时进行扩展,就像@Jarod42 建议的那样("LOCAL_" + std::to_string(ii)),但是你会留下一个字符串。在运行时,编译器已经忘记了像 LOCAL_1 这样的符号。 .

那么回到方 block 1,如何转换iiLOCAL_xx ?我建议如下:

如果LOCAL_xx是枚举,然后只需将枚举常量分配给要从 ii 转换的值即可.

enum {
LOCAL_1 = 1,
LOCAL_2 = 2,
};

现在ii基本没有区别了和 LOCAL_xxx .无需转换。

如果LOCAL_xx不是整数常量,那么您将需要自己构造映射。例如使用 std::map<int, LOCAL_xxx>或一个大的 switch 语句。

关于c++ MACRO动态变量上未声明的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22043360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com