从int到typedef枚举数据的转换无效

时间:2014-05-23 17:37:23

标签: c++ enums int typedef

我有一个旧的C ++代码,我有一个函数:

void InitPlace( PLACE_NUMBER place, char* szName,
                PLACE_NUMBER pnNumSize, PlacePolicy policy );

当我使用:

调用此函数时
InitPlace( 0, "", 2, 0 );

我收到一条错误消息:

  

从int到PlacePolicy的无效转换

placepolicy定义如下:

typedef enum {
    RANDOM=0,
    FIFO=1,
    LIFO=2
} PlacePolicy;

你们有没有想到我为什么会收到错误?

2 个答案:

答案 0 :(得分:1)

您必须明确地将int转换为enum类型:

InitPlace( 0, "", 2, PlacePolicy(0) );

这假设你肯定价值是正确的。 但你应该这样做:

InitPlace( 0, "", 2, RADNOM );

代替。

此外,szName参数是非const char点,并且您正在传递字符串文字。制作const char* szName

答案 1 :(得分:0)

您的函数调用应该看起来像

 InitPlace(PLACE_NUMBER(0), "", PLACE_NUMBER(0), RANDOM);

我无法告诉您,因为您没有告诉我们PLACE_NUMBER类型实际上应该是什么。

此外,您可以省略typedef声明中的enum,这是c ++中的冗余。对于实际的c ++标准,它应该是

enum class PlacePolicy {
    RANDOM=0,
    FIFO=1,
    LIFO=2
};

InitPlace(PLACE_NUMBER(0), "", PLACE_NUMBER(0), PlacePolicy::RANDOM);