如何使用带有ENUM的strcat?

时间:2011-03-29 05:35:03

标签: c++ enums char strcat

我有一个外部工具,它根据用户输入生成ENUM。现在我的C ++代码正在使用这个ENUM,我必须根据变量'x'选择一个特定的ENUM。生成的ENUMS格式为'ENUM_1','ENUM_2','ENUM_3'......等等。现在我想要代码中的代码,以便根据'x'选择适当的ENUM。我尝试使用strcat函数,如:

typedef enum ( enum_1, enum_2, enum_3...enum_n) map1;

y=(map1)strcat("enum_", x);

但它给出了错误“无法从char *转换为map1。

有人可以建议一种实现这一目标的方法。

THANKYOU

3 个答案:

答案 0 :(得分:1)

您无法使用strcat执行此操作。从描述中我理解的是,您希望将x转换为map1。为此,您可以map1 m = (map1)(x-1);查看此示例代码:

typedef enum { enum_1, enum_2, enum_3} map1;

int main()
{
    int x = 1;
    map1 m = (map1)(x-1);
}

-1是必需的,因为map1中枚举的整数值从0开始。

答案 1 :(得分:1)

你不能这样做。那么你不能这样做......

在编译时不会按名称评估枚举。你必须尝试使用​​预处理器。您可以创建一个定义来执行类似的操作。类似的东西:

#define fn(x) enum_##x

然后致电

fn(x)

但是当文件被预处理时会发生这种情况。所以你无法访问运行时变量。根据你的代码判断,我认为你不能做你想做的事。 祝你好运。

答案 2 :(得分:0)

  

现在我想要代码中的代码,以便根据'x'选择适当的ENUM。

枚举值为常量,并且基于我假设x是整数数据类型的语句。

y=(map1)strcat("enum_", x);

strcat(..)传递参数的类型应为char*。显然,基于之前的陈述,x不属于char*类型。不清楚为什么使用strcat来完成此任务。

回答您的主题:否。您不能将strcat与枚举值一起使用。