C ++类模板错误

时间:2015-05-23 12:44:18

标签: c++ templates

当我尝试使用我班级的构造函数时,我收到以下错误:

  

错误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();
 }

2 个答案:

答案 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指出你应该在队列使用中声明你的队列类型。