c++ - 获取不同的枚举值 C++

标签 c++ enums

我正在尝试使用 void 指针从我的枚举中获取不同的值。

我有一个动物列表的枚举声明

enum Animal {Rat, Ox, Tiger, Rabbit, Dragon, Snake, Horse, Sheep, Monkey, Rooster, Dog, Pig};

所以首先,我有一个函数可以从我的枚举中随机返回一个值

VoidPtr getAnAnimal()
{
   VoidPtr anAnimal;

   Animal *a = new Animal;

   int k = rand() % 12;

   *a = static_cast<Animal>(k);

   anAnimal = a;

   return anAnimal;
}

然后在我构造数组的过程中,我有一个条件语句,说明如果数组具有相同的值,则假设随机生成另一个枚举值

void constructSet(VoidPtr* animalArray, int size)
 { 

   for(int i = 0; i < size; i++)
   {
       animalArray[i] = getAnAnimal();

        int k = 0; 

       while ((k < i) && (animalArray[i] == animalArray[k]))
       {     
           animalArray[i] = getAnAnimal();   

           k++;
       }        
   }

}

不幸的是,如果数组相同,尽管调用了另一个值,它仍然返回相同的枚举值。

最佳答案

您的错误是,在比较 animalArray[i]==animalArray[k] 时,您比较的是枚举的地址,而不是它们的值。正确的比较是(在评论后编辑,显然这不是干净代码的样子,但错误在于将 enum 作为 void* 传递)

*static_cast<Animal*>(animalArray[i])==*static_cast<Animal*>(animalArray[k])

但是,您应该重新考虑将您的Animal 存储为指针。 在 C++ 中,通常没有理由通过 new 分配对象(您也不需要在 C++ 中使用指针,除非您确实必须这样做)。至少对于像您这样的简单问题而言不是这样。

关于c++ - 获取不同的枚举值 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40244756/

相关文章:

python - 当在枚举值中使用类函数时,“函数”对象没有属性 'value'

java - 如何在 Java 中使用通用枚举类型从类返回枚举

c++ - 在不实例化的情况下计算结构成员的偏移量

java - 使用 Python/C++/Java 将实时视频流式传输到网页的最佳方法

c++ - 使用c/c++打开随机命名文件夹中的文件

java - 为什么我收到错误 "Constructor is undefined"?

ios - Swift:使用枚举来表示扑克牌的等级

java - 如何使用将枚举传递给 DTO

c# P/调用 : Pass Enum value with IntPtr to Function; AccessViolationException

c++ - 命名空间 'vsnprintf' 中没有名为 'std' 的成员;你是说 'vsprintf' 吗?