我有一个旧的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;
你们有没有想到我为什么会收到错误?
答案 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);