2015-08-10 2 views
-1

Я хочу отсортировать список по кратчайшему пути к месту назначения.Сортировка с функцией, без результата

Я использую функцию сортировки, поэтому я иду от начала до конца и вычисляю, что является лучшим путем для перехода к следующему врагу.

std::vector<std::shared_ptr<Enemy>> ek = model->getAllEnemies(); 
std::sort(ek.begin(), ek.end(), customLess); 

изменил его на структуру:

struct { 
     bool operator()(const std::shared_ptr<Enemy> &e, const std::shared_ptr<Enemy> &nexthp) 
     { 
      int pathcost = findPathfindingNodes(e->getXPos(), e->getYPos(),true); 
      int pathcost2 = findPathfindingNodes(nexthp->getXPos(), nexthp->getYPos(),true); 
      return pathcost < pathcost2; 
     } 
    } customLess; 

Но когда я хочу использовать функцию findpathfindingnodes которая объявлена ​​в том же файле .cpp он выдает ошибку:

/controller.cpp:235: error: 'findPathfindingNodes' was not declared in this scope 
      int pathcost = findPathfindingNodes(e->getXPos(), e->getYPos(),true); 
+0

Что вы имеете в виду под «нет результата»? Что именно происходит неправильно? В каком контексте вы вызываете sort() и где объявляется findPathfindingNodes()? Вы попробовали лямбда? –

+0

Я обновил свой код, теперь я работал со структурой в том же файле .cpp, но до сих пор не могу найти findPathfindingNodes(). Я еще не использовал лямбда, как я должен писать его с лямбдой? –

+1

'findPathfindingNodes (..)' не является методом 'customLess', поэтому компилятор жалуется. Lambdas не поможет вам, если вы не понимаете основные правила определения области. – cmannett85

ответ

1

просто включите класс, который имеет эту функцию в нем ...

class SomeClass 
{ 
    public: 
     SomeClass(); 
     int findPathfindingNodes(); 
} 

то место, куда вы хотите использовать его убедитесь, что вы включили класс #include "SomeClass"

затем просто создать экземпляр этого и вызвать функцию

SomeClass instance_of_some_class(); 
int result = instance_of_some_class.findPathfindingNodes(); 
Смежные вопросы