2011-03-29 18 views
0

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

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

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

,但它给我的错误“无法从字符*转换为MAP1

可有人请提出实现这一目标的方法

三江源

回答

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开始

0

现在我想我的代码里面的代码,这样相应的ENUM是基于选择在'x'上。

枚举值是常量基于所述发言我假定x是整数数据类型。

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

strcat(..)传递参数的类型应该是char*。根据之前的说法,x不是char*类型。不清楚你为什么使用strcat来完成这项任务。

回答您的主题行:您不能使用具有枚举值的strcat。

1

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

枚举不在编译时按名称评估。你必须用预处理器来尝试一些东西。你可以创建一个定义来做类似的事情。喜欢的东西:

#define fn(x) enum_##x 

然后调用

fn(x) 

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

+1

名称修改不适用于枚举值,也不是由预处理器完成的。这可能是他想要的伎俩,尽管...... – Potatoswatter 2011-03-29 05:50:00