在Unix中使用std :: queue()的问题

时间:2015-03-06 04:31:32

标签: c++ unix c++11 std c++-standard-library

我的程序中有以下代码:

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上运行?

1 个答案:

答案 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。