我的程序中有以下代码:
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 :(得分:0)
删除 typename 。
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。