Я пытаюсь получить отличное значение из моего перечисления с помощью указателей void.Получение различных значений перечисления C++
Я перечисление декларации списка животных
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++;
}
}
}
К сожалению, он по-прежнему возвращает мне то же значение перечисления, несмотря на вызов другого значения, если массив одинаковый.
Один не может бросить целое число к объекту - вы бы также иметь утечку памяти здесь в качестве нового животного (а) теряются без удаления – UKMonkey
Вы, вероятно, хотите использовать функцию завода, основанной на вашем 'перечисления '. Некоторое кастинг понадобится. И используйте 'Animal *' вместо 'VoidPtr'. –
Я думаю, что вы пытаетесь сделать фабрику животных - там, где вы называете getAnimal (AnimalTypeEnum) ... Это называется заводской паттерн ... grr - избили пунш от @ πάνταῥεῖ – UKMonkey