为什么 类模板中 定义重载赋值运算符 编译发生错误?
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
是报错还是什么?
#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
是报错还是什么?