在 Unix 中使用 std::queue() 时出现问题

Problems using std::queue() in Unix

本文关键字:问题 queue std Unix      更新时间:2023-10-16

我的程序中有以下代码:

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;

类型

告诉编译器标记后面是类型,而不是变量。 在您的示例中,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。