无效地使用没有参数列表的template-name Queue

invalid use of template-name Queue without an argument list

本文关键字:列表 template-name Queue 参数 无效      更新时间:2023-10-16

我得到一个编译错误,我不能弄清楚。上面写着:

Queue.h:18:23: error:无效使用template-name ~ queue€™而没有参数列表Queue.h:23:23: error:无效使用template-name ~ queue€™而没有参数列表

有人能帮忙吗?

#if !defined QUEUE_SIZE
#define QUEUE_SIZE 30
#endif
using namespace std;
template <class TYPE> class Queue
{
 private:
  TYPE *array;
 public:
  Queue(Queue& other);
  Queue();
  ~Queue();
  Queue& operator=(Queue other);
  TYPE pushAndPop(TYPE x);
};
template <class TYPE> Queue::Queue()
{
  array=new TYPE[size];
}
template <class TYPE> Queue::~Queue()
{
  delete [] array;
}

语法有点不对。你需要:

template <class TYPE> Queue<TYPE>::Queue()
{
...
}
template <TYPE>
Queue<TYPE>& operator=(Queue<TYPE> other) { ... }

尽管注意在大多数情况下你可能应该通过const引用传递(当然不是通过非const引用):

template <TYPE>
Queue<TYPE>& operator=(const Queue<TYPE>& other) { ... }

或者,您可以内联实现:

template <class TYPE> class Queue
{
 private:
  TYPE *array;
 public:
  Queue(Queue& other);
  Queue() { array = new TYPE[size];}
  ~Queue() { delete [] array; }
  Queue& operator=(Queue other) { .... }
  TYPE pushAndPop(TYPE x) { .... }
};

同样,将using namespace std放在头文件中也不是一个好主意。事实上,把它放在任何地方都不是一个好主意。