模板复制构造函数

时间:2013-12-07 04:15:18

标签: c++

我需要为我的类MyVector创建一个复制构造函数。

#include <iostream> 
using namespace std;

template<class T>
class MyVector{
    private:
        T *v;
        int size;
        int max;

    public:
        MyVector();
        MyVector(const MyVector &l);
        MyVector& operator=(const MyVector &lhs);
        T &operator[](unsigned int i);
};

int main() {
    return 0;
}

template<class T>
MyVector& MyVector<T>::operator = (const MyVector &lhs){
    if (this == &lhs) return *this;

    for (int i = 0; i < size; ++i){
        delete v[i];
    }

    delete [] v;

    max = lhs.max;
    size = lhs.size;
    v = new T[max];

    for(int i = 0; i < size; ++i) {
        v[i] = new T(*(lhs.v[i]));
    }

    return *this;
}

我收到错误:expected constructor, destructor, or type conversion before âmyVectorâ

不确定问题出在哪里,我对c ++还不熟悉。 感谢。

3 个答案:

答案 0 :(得分:1)

以下是问题:

template<class T>
MyVector& MyVector<T>::operator = (const MyVector &lhs){
  /* ... */
}

返回类型MyVector&应为MyVector<T>&,因为您不在类范围内,因此您需要在那里提供模板参数,如下所示:

template<class T>
MyVector<T>& MyVector<T>::operator = (const MyVector &lhs){
  /* ... */
}

答案 1 :(得分:1)

在函数实现的返回中,写下MyVector<T>

template<class T>
MyVector<T>& MyVector<T>::operator = (const MyVector &lhs)
{

请注意,您正在实现赋值运算符,而不是复制构造函数。

一个不错的选择是使用C ++ 11语法,返回类型跟随函数头:

template<class T>
auto MyVector<T>::operator = (const MyVector &lhs)
    -> MyVector&
{

答案 2 :(得分:0)

MyVector(const MyVector &l);

应该是:

MyVector(const MyVector<T> &l);

以及类似地使用MyVector作为类型的其他地方,因为没有模板参数,类型不完整。