я застрял этот кусок кода:станд :: Vect сортировка с переменной-члена
class MyObject
{
public:
int value;
}
class MyClass
{
private:
btAlignedObjectArray<MyObject*> m_objects;
public:
int comp (MyObject *a, MyObject *b)
{
return calculateTheNewValue(a->value) < calculateTheNewValue(b->value);
}
void doSort()
{
m_objects.quickSort(comp);
}
//edit: this member function is needed to do the sorting
int calculateTheNewValue(int v)
{
// do some calculation using other members variables, not necessarily m_objects
}
};
Это не компилируется, потому что комп не является статической функции члена.
comp can not be static, потому что ему нужно получить доступ к переменной-члену m_objects.
Также было бы победить инкапсуляцию m_objects иметь статическую функцию и вызвать ее так
MyClass::doSort(myClass.m_objects)
Edit
Это декларация btAlignedObjectArray
http://bulletphysics.org/Bullet/BulletFull/btAlignedObjectArray_8h_source.html
Линия 365 имеет декларацию или quicksort
comp, как есть, не требует доступа к m_objects, поскольку вы уже передаете объекты, которые следует сравнивать друг с другом. Вы уверены, что пример завершен? –
@j_schultz Извините, я пропустил важную часть кода, возможно, слишком много (или слишком мало) кофе. calculateTheNewValue() - это функция-член, необходимая для сортировки – rraallvv
Показать объявление 'btAlignedObjectArray :: quickSort'. – soon