Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;类模板错误_C++_Templates - Fatal编程技术网

C++ C++;类模板错误

C++ C++;类模板错误,c++,templates,C++,Templates,当我试图使用我的类的构造函数时,我得到以下错误: 错误C2955:“myQueue”:使用类模板需要模板参数列表 及 错误C2512:“myQueue”:没有合适的默认构造函数可用 这是一个头文件: #ifndef myQueue_ #define myQueue_ template<typename type> class myQueue{ public: myQueue(); ~myQueue(); type dequeue(); void en

当我试图使用我的类的构造函数时,我得到以下错误:

错误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

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

#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
\ifndef myQueue_
#定义我的队列_
模板
类myQueue{
公众:
myQueue();
~myQueue();
类型dequeue();
无效排队(t型);
私人:
整数大小;
类型*arr;
int草体化;
};
模板
myQueue::myQueue()
{
尺寸=10;
arr=新类型[尺寸];
}
模板
myQueue::~myQueue()
{
删除arr[];
arr=NULL;
}
#恩迪夫

正如Caduchon所指出的,您应该在队列使用中声明队列的类型。

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

你的主要观点是错误的

int main(){
    myQueue<YourType>* a = new myQueue<YourType>;  // for pointer
    myQueue<YourType> b;  // for instance
 }
intmain(){
myQueue*a=新建myQueue;//用于指针
myQueue b;//例如
}

请同时检查。1>Blank.obj:错误LNK2019:未解析的外部符号“public:\u thiscall myQueue::~myQueue(void)”(?1$myQueue@H@@QAE@XZ)在函数\u main 1>Blank.obj中引用:错误LNK2019:未解析的外部符号“public:\u thiscall myQueue::myQueue(void)”(?0$myQueue@H@@QAE@XZ)在函数_main中引用
#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
int main(){
    myQueue<YourType>* a = new myQueue<YourType>;  // for pointer
    myQueue<YourType> b;  // for instance
 }