【问题标题】:C++ class template errorC++ 类模板错误
【发布时间】:2015-08-05 10:16:25
【问题描述】:

当我尝试使用类的构造函数时,出现以下错误:

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

【问题讨论】:

标签: c++ templates


【解决方案1】:

正如 Wojciech Frohmberg 所解释的,您必须在 *.h 文件而不是 *.cpp 文件中定义类,因为当使用特定类型调用代码时,它实际上是被编译的。

而你的主线是错的。

int main(){
    myQueue<YourType>* a = new myQueue<YourType>;  // for pointer
    myQueue<YourType> b;  // for instance
 }

【讨论】:

  • 1>Blank.obj:错误 LNK2019:无法解析的外部符号“public:__thiscall myQueue::~myQueue(void)”(??1?$myQueue@H@@ QAE@XZ) 在函数 _main 1>Blank.obj 中引用:错误 LNK2019:未解析的外部符号“public: __thiscall myQueue::myQueue(void)”(??0?$myQueue@H@@QAE @XZ) 在函数 _main 中引用
【解决方案2】:

您没有正确使用模板。模板类和方法应该在头文件中声明,只有完整的特化应该存储在源文件中。因此,您的头文件应如下所示:

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

【讨论】:

    猜你喜欢
    • 2012-10-04
    • 2012-11-11
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2013-04-20
    相关资源
    最近更新 更多