Ошибка компиляции типа очереди приоритета STL

Я думал, что понял это, но, думаю, я ошибался. У меня сложилось впечатление, что первый элемент в<…> ‘- это тип, который должен храниться в очереди, второй — это тип контейнера (варианты выбора’ vector ‘или’ dequeue ‘), а третий — это класс, который перегружает оператор’ () ‘для сравнение. Исходя из этого, я думаю, что следующий код должен компилироваться, но это не так 🙁

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q();

uint32_t* nodeEdge = new uint32_t[2];
nodeEdge[0] = startN;
nodeEdge[1] = 0;

q.push(nodeEdge);

‘edgeComparator’ определяется следующим образом:

class edgeComparator
{
public:
bool operator() (const uint32_t*& lhs, const uint32_t*& rhs) const
{
return (lhs[1]>rhs[1]);
}
};

Вот ошибка, которую я получаю:

./Graph.cpp: In member function `void Graph::findShortestPath()':
./Graph.cpp:148: error: request for member `push' in `q', which is of non-class type `std::priority_queue<uint32_t*, std::vector<uint32_t*, std::allocator<uint32_t*> >, edgeComparator> ()()'

Хуже того, я также получаю эту ошибку при попытке ‘q.empty ()’

./Graph.cpp:150: error: request for member `empty' in `q', which is of non-class type `std::priority_queue<uint32_t*, std::vector<uint32_t*, std::allocator<uint32_t*> >, edgeComparator> ()()'

1

Решение

Ты имел:

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q();

Но вместо этого вы должны использовать:

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q;

Первая версия объявляет функция названный q, который не принимает аргументов и возвращает значение типа std::priority_queue<...>,

Вторая версия объявляет переменная названный qтипа std::priority_queue<...>, который инициализируется по умолчанию.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]