怎么在类模板中 重载赋值运算符?

时间:2022-10-13 19:18:28

为什么 类模板中 定义重载赋值运算符 编译发生错误?
error C2063: '=' : not a function
        :see reference to class template instantiation 'CDArray<DataType>' being compiled
: error C2040: '=' : 'class CDArray<DataType> &(const class CDArray<DataType> &)' differs in levels of indirection from 'int'
        : see reference to class template instantiation 'CDArray<DataType>' being compiled
 : fatal error C1903: unable to recover from previous error(s); stopping compilation
Command line warning D4028 : minimal rebuild failure, reverting to normal build


代码如下
template <class DataType>
class CDArray
{
private:
double *m_pData;
int m_nSize;
int m_nMax;

private:
void Init();
void Free();
inline int InvalidateIndex(int nIndex);

public:
CDArray();
CDArray(int nSize, DataType dValue = 0);
CDArray(const CDArray& arr);

~CDArray(); // 析构函数


CDArray<DataType>  &CDArray<DataType>::operator = (const CDArray<DataType>& array);   // 重载赋值操作符号"="
};


template <class DataType>
CDArray<DataType>  &CDArray<DataType>::operator = (const CDArray<DataType>& array)
{
m_nSize = array.m_nSize;
m_nMax = array.m_nMax;

m_pData = new DataType [m_nSize*2];//必须进行深拷贝
if (m_pData == NULL)
{
cout<< "Can not alloc memory !" << endl;
}
else
{
for (int i=0; i<m_nSize; i++)
{
m_pData[i] = array.m_pData[i];
}
}
return *this;
}

3 个解决方案

#1


楼主可以参考下:

#include <iostream>
using namespace std;
template <class DataType>
class CDArray
{
private:
DataType *m_pData; //
int m_nSize; 
int m_nMax; 

private:
void Init(); 
void Free(); 
inline int InvalidateIndex(int nIndex); 

public:
CDArray() : m_pData(0), m_nSize(0), m_nMax(0){}
CDArray(int nSize, DataType dValue = 0); 
CDArray(const CDArray& arr); 

~CDArray(){}// 析构函数


CDArray<DataType>& operator= (const CDArray<DataType>& Array1);   // 重载赋值操作符号"="
};


template <class DataType>
CDArray<DataType>& CDArray<DataType>::operator = (const CDArray<DataType>& Array1)

m_nSize = Array1.m_nSize;
m_nMax = Array1.m_nMax;

m_pData = new DataType [m_nSize * 2];//必须进行深拷贝
if (m_pData == NULL)
{
cout<< "Can not alloc memory !" << endl;
}
else
{
for (int i= 0; i< m_nSize; i++)
{
m_pData[i] = Array1.m_pData[i];
}

return *this;


int main()
{
CDArray<int> av;
CDArray<int> ac;
ac = av;
return 0;
}

#2


试了下 还是不行 不知道在哪里有问题

#3


引用 2 楼 wlsmsm1 的回复:
试了下 还是不行 不知道在哪里有问题

是报错还是什么?

#1


楼主可以参考下:

#include <iostream>
using namespace std;
template <class DataType>
class CDArray
{
private:
DataType *m_pData; //
int m_nSize; 
int m_nMax; 

private:
void Init(); 
void Free(); 
inline int InvalidateIndex(int nIndex); 

public:
CDArray() : m_pData(0), m_nSize(0), m_nMax(0){}
CDArray(int nSize, DataType dValue = 0); 
CDArray(const CDArray& arr); 

~CDArray(){}// 析构函数


CDArray<DataType>& operator= (const CDArray<DataType>& Array1);   // 重载赋值操作符号"="
};


template <class DataType>
CDArray<DataType>& CDArray<DataType>::operator = (const CDArray<DataType>& Array1)

m_nSize = Array1.m_nSize;
m_nMax = Array1.m_nMax;

m_pData = new DataType [m_nSize * 2];//必须进行深拷贝
if (m_pData == NULL)
{
cout<< "Can not alloc memory !" << endl;
}
else
{
for (int i= 0; i< m_nSize; i++)
{
m_pData[i] = Array1.m_pData[i];
}

return *this;


int main()
{
CDArray<int> av;
CDArray<int> ac;
ac = av;
return 0;
}

#2


试了下 还是不行 不知道在哪里有问题

#3


引用 2 楼 wlsmsm1 的回复:
试了下 还是不行 不知道在哪里有问题

是报错还是什么?