none
Error C2064: Utilizando función Sort() con criterio de comparación utilizando una variable miembro de una Clase. RRS feed

  • Pregunta

  • Hola Estimados,

    Resulta que tengo el conocido error "C2064 el término no se evalúa como una función con 2 argumentos". He mirado diversos post y recomiendan lo siguiente: Declare la función de comparación como 'static', 'virtual', haga una función regular y no un método, pero esas opciones las veo lógicas pero no me han funcionado. Les explico mi código y una posible razón de mi error:

    Código:

    //Grasp.h #include <iostream> #include <vector> #include <algorithm> #include <sstream> #include <fstream> #include <random> #include <ctime> using namespace std; struct NODE { int NodeNumber; string CityName; int Demand; int ReadyTime; int DueTime; int ServiceTime; }; class Grasp { public: Grasp (); ~Grasp (); bool clientes_sorter_distancia(const NODE&, const NODE&); void CONSTRUCTIVE(); private: vector<NODE > Cities;

    vector<vector<int> > Distance; NODE Depot; NODE actual; };

    //Grasp.cpp

    #include "Grasp.h" Grasp::Grasp() {} Grasp::~Grasp() {} bool Grasp::clientes_sorter_distancia(const NODE& lhs, const NODE& rhs) { vector<int> dist = Distance[actual.NodeNumber]; return dist[lhs.NodeNumber] < dist[rhs.NodeNumber]; } void Grasp::CONSTRUCTIVE() { //... actual = subtour.back(); sort(cities.begin(), cities.end(), &Grasp::clientes_sorter_distancia); //ordenar clientes por mas cercano a un nodo dado //... }


    Posible razón:

    En la implementación de la función (clientes_sorter_distancia) yo hago uso del vector "Distance" porque lo necesito, pero al probar la alternativa friend al parecer el error C2064 desaparece, pero el método me dice que como ya no pertenece a la clase 'Grasp' y por ende no puede ver el vector. 

    Como puedo solucionar el error C2064 y poder utilizar la función de comparación de la manera que la tengo implementada?

    Saludoss.

    viernes, 1 de mayo de 2020 16:35