У меня есть следующий код в моей программе:
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?
удалите это имя. 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.
Leftist_node
или, что еще лучше, придумать небольшой, но автономный фрагмент кода, который повторяет проблему.