2013-08-13 4 views
0

Ceci est mon code:Pourquoi ne puis-je pas utiliser un foncteur comme fonction de comparaison dans btAlignedObjectArray: quicksort?

#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; 
} 

L'erreur est No matching function for call to object of type 'const Comparator'

dans les lignes 345 et 347 dans btAlignedObjectArray.h

Répondre

1

Essayez d'ajouter const à votre operator()

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

également que vous avez déjà capturé par vous-même, myReference devrait être const aussi

int myReference() const 
//    ^^^^ 
+0

Je genre de travaux, désolé je ne comprend pas toute l'histoire, j'ai ajouté la fonction de membre MyReference(), qui doit être appelé au sein de l'opérateur foncteur surchargé – rraallvv

+0

L'erreur est que MyReference besoin d'être constante, je suppose que je devrais refactoriser mon code – rraallvv

+0

fondamentalement, toutes les fonctions membres non statiques n'ont pas l'intention de modifier le membre devrait déclarer comme const :) – billz

Questions connexes