Search code examples
c++arrayssortingbulletphysics

Why can't I use a functor as the comparator function in btAlignedObjectArray:quicksort?


This is my code:

#include "btScalar.h"
#include "btAlignedAllocator.h"
#include "btAlignedObjectArray.h"

class Comparator
{
    btAlignedObjectArray<int> items;

    // Edit: this member function is to be called from within the comparator
    int myReference()
    {
        return 0;
    }

public:
    Comparator()
    {
        items.push_back(5);
        items.push_back(1);
        items.push_back(3);
        items.push_back(8);     
    }

    int operator()(const int &a, const int &b) const
    {
        return a + myReference() < b;
    }

    void doSort()
    {
        items.quickSort(*this);

        for (int i=0; i<items.size(); i++) {
            printf("%d\n", items[i]);
        }
    }
};

int main()
{
    Comparator myClass;

    myClass.doSort();

    printf("done!\n");

    return 0;
}

The error is No matching function for call to object of type 'const Comparator'

in lines 345 and 347 in btAlignedObjectArray.h


Solution

  • Try to add const to your operator()

    int operator()(const int &a, const int &b) const
    //                                         ^^^^^
    {
        return a < b;
    }
    

    Also as you have captured by yourself already, myReference should be const as well

    int myReference() const
    //                ^^^^