当我尝试使用我班级的构造函数时,我收到以下错误:
错误C2955:' myQueue' :使用类模板需要模板参数列表
和
错误C2512:' myQueue' :没有合适的默认构造函数。
这是一个头文件:
#ifndef myQueue_
#define myQueue_
template<typename type>
class myQueue{
public:
myQueue();
~myQueue();
type dequeue();
void enqueue(type t);
private:
int size;
type* arr;
int curSize;
};
#endif
这是一个cpp文件。
#include "myQueue.h"
#include "genlib.h"
template<typename type>
myQueue<type>::myQueue()
{
size = 10;
arr = new type[size];
}
template<typename type>
myQueue<type>::~myQueue()
{
delete arr[];
arr = NULL;
}
尝试在这里使用这个课程。
int main(){
myQueue a = new myQueue();
}
答案 0 :(得分:2)
正如Wojciech Frohmberg所解释的那样,您必须在* .h文件中定义类而不是* .cpp文件,因为代码在使用特定类型调用时才真正编译。
你的主要是错的。
int main(){
myQueue<YourType>* a = new myQueue<YourType>; // for pointer
myQueue<YourType> b; // for instance
}
答案 1 :(得分:0)
您没有正确使用模板。模板类和方法应该在头文件中声明,只有完整的专业化应该存储在源文件中。因此,您的头文件应如下所示:
#ifndef myQueue_
#define myQueue_
template<typename type>
class myQueue{
public:
myQueue();
~myQueue();
type dequeue();
void enqueue(type t);
private:
int size;
type* arr;
int curSize;
};
template<typename type>
myQueue<type>::myQueue()
{
size = 10;
arr = new type[size];
}
template<typename type>
myQueue<type>::~myQueue()
{
delete arr[];
arr = NULL;
}
#endif
同样,Caduchon指出你应该在队列使用中声明你的队列类型。