Использование qsort из cstdlib

Я пытаюсь запустить qsort из cstdlib. Функция

qsort (m_all_animals, numberOfAnimals (), sizeof (Animal *), сравнить);

выполняется успешно, но не сортирует m_all_animals. На самом деле, это ничего не делает с массивом. Основные структуры данных здесь

Animal** m_all_animals;

//the number of elements, I tested it and it works
int numberOfAnimals(){
int result=0;
for (int i=0;i<m_size*2;++i){
if (m_all_animals[i]==NULL)
break;
++result;
}
return result;
}

int compare (const void* p1, const void* p2){
return ((Animal*) p1)->get_size()-((Animal*) p2)->get_size();
}

У меня есть следующая иерархия наследования, если это помогает

Animal<-Bear
Bear<-brown_bear
brown_bear<-white_bear
Bear<-panda_bear
Animal<-snail

1

Решение

Ваш массив указателей на Animal, Так что ваши compare функция на самом деле принимает указатели на указатели Animal:

int compare (const void* p1, const void* p2){
return (*(Animal**)p1)->get_size()-(*(Animal**)p2)->get_size();
}
2

Другие решения

Не использовать qsort() в C ++! Это медленно, не безопасно для типов, и разрушит, когда используется на не POD типах. использование std::sort() вместо.

4

Ваши указатели не верны. У вас есть массив указателей (Animal *); это должен быть массив Animal тип данных, а не указатель, если вы хотите использовать свой compare, Или вам нужно будет изменить compare работать с Animal **,

2
По вопросам рекламы [email protected]