【问题标题】:Invalid conversion from int to typedef enum data从 int 到 typedef 枚举数据的无效转换
【发布时间】:2014-05-23 17:37:22
【问题描述】:

我有一个旧的 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;

你们知道我为什么会出错吗?

【问题讨论】:

  • 尝试投射InitPlace(PLACE_NUMBER(0), "", PLACE_NUMBER(0), PlacePolicy(0));
  • PLACE_NUMBERPlacePolicy这两个类型有什么关系?也许你应该只通过RANDOM 而不是0?或者也许你应该创建像PLACE_NUMBER const RANDOM(0); 这样的常量而不是枚举?顺便说一句:通常只对宏使用 ALL_UPPERCASE,请参阅任何好的 C++ 常见问题解答。

标签: c++ enums int typedef


【解决方案1】:

您必须将int 显式转换/转换为enum 类型:

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

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

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

改为。

另外,szName 参数是非常量字符点,您正在传递字符串文字。让const char* szName .

【讨论】:

    【解决方案2】:

    你的函数调用应该是这样的

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

    我不能肯定,因为你没有告诉我们PLACE_NUMBER 类型实际上应该是什么。

    您也可以从enum 声明中省略typedef,这在c++ 中是多余的。对于实际的 c++ 标准,它应该是

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多