我正在尝试使用 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/