Проблемы с использованием std :: queue () в Unix

0

У меня есть следующий код в моей программе:

std::queue<typename Leftist_node<Type> *> traversal;

Он компилируется и работает нормально, когда я запускаю его в Windows. Однако, когда я запускаю ту же самую программу в Unix, я получаю следующую ошибку:

Leftist_heap.h:89: error: template argument 1 is invalid
Leftist_heap.h:89: error: template argument 2 is invalid

Я также получаю эти сообщения при попытке работать с очередью:

Leftist_heap.h:92: error: request for member âpushâ in âtraversalâ, which is of non-class type âintâ

Есть ли причина для этого? Нужно ли мне что-то менять, чтобы он работал в Unix?

  • 0
    Вы также должны написать, где и как определяется Leftist_node или, что еще лучше, придумать небольшой, но автономный фрагмент кода, который повторяет проблему.
Теги:
c++11
std
c++-standard-library

1 ответ

0

удалите это имя. std::queue<Leftist_node<Type>*> traversal;

typename говорит, что токены компилятора - это типы, а не переменные. в вашем примере, Leftist_node<Type>* - это точный тип. поэтому вам не требуется ключевое слово typename.

#include <queue>

template<typename T>
class Leftist_node{};

class Type{};

template<typename T>
typename T::value_type front(T& queue)
{
  typename T::value_type v = queue.front();
  return v;
}

int main()
{
  std::queue<Leftist_node<Type>*> traversal;

  std::queue<int> q;
  q.push(1);

  return front(q);
}

gcc версии 4.8.2 и clang версии 3.5.0.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню