类模板分开定义时,.cpp文件实现构造函数,报错模板已定义

我在ArryList.h里定义了一个类:
template
class arryList
{
public:
arryList(int size = 10):lenth(size){};
arryList(const arryList& L1);
// arryList(int size = 10, int addLen = 2);
~arryList();

private:
T* element;
int lenth; //数组容量
int listsize; //数组存储容量个数
};
然后在ArryList.cpp里实现这个类构造函数图片说明
报错说模板已定义(arrylist.cpp(9): error C2995: 'arryList::arryList(int)' : function template has already been defined),但是把template去掉的话T又会未定义

3个回答

arryList(int size = 10):lenth(size){};这句话代表你已经定义构造函数为初始化lenth为size的空构造函数了,再在.cpp中定义自然会提示重复。你可以把.h中的这行去掉,然后.cpp中改为

 template< class T>
 arrayList<T>::arrayList(int size):lenth(size){
     this->element = new T[lenth];
     listsize = 0;
 }

另外希望你下次发代码能发成我这种格式,大家都容易看。

JonathanYan
JonathanYan 回复weixin_41908053: 给你点赞!
大约 2 年之前 回复
weixin_41908053
liuxin95 回复weixin_41908053: 少删了{},删掉{}就好了,谢谢啦
大约 2 年之前 回复
weixin_41908053
liuxin95 在.h文件中删掉了,但是还是报错:模板已定义 。代码我在回答里重发了一遍
大约 2 年之前 回复

一楼说错了,是吧.h中的那行改为

//原来是
arryList(int size = 10):lenth(size){};
//改为
arryList(int size = 10);

ArryList.h

 #ifndef ARRYLIST_H
#define ARRYLIST_H

template<class T>
class arryList
{
public:
    arryList(int size = 10){};
    arryList(const arryList& L1);
//  arryList(int size = 10, int addLen = 2);
    ~arryList();

private:
    T* element;
    int lenth; //数组容量
    int listsize; //数组存储元素个数
};


#endif // !ARRYLIST_H

ArryList.cpp

 #include"ArryList.h"
#include <algorithm>


template<class T>
arryList<T>::arryList(int size)
{
    lenth = size;
    element = new T[lenth];
    listsize = 0;
}

template<class T>
arryList<T>::arryList(const arryList& L1)
{
    this->lenth = L1.lenth;
    this->listsize = L1.listsize;
    this->element = new T[lenth];
    copy(L1.element, L1.element + listsize, this->element);

}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐