liuxin95
2018-09-20 14:16
采纳率: 37.5%
浏览 953
已采纳

类模板分开定义时,.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条回答 默认 最新

  • JonathanYan 2018-09-20 15:15
    已采纳

    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 2018-09-20 15:20

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

    //原来是
    arryList(int size = 10):lenth(size){};
    //改为
    arryList(int size = 10);
    
    点赞 打赏 评论
  • liuxin95 2018-09-20 15:24

    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);
    
    }
    
    点赞 打赏 评论

相关推荐 更多相似问题