写红军长征的作文:复制构造函数中调用被应用对象的成员函数

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/05 17:48:49
高手来看一下我写的这个复制构造函数:
LL::LL(const LL& thatLL)
{
if(thatLL.Len()==0u) return;
if((FNA=new Nd)==NULL) {cout<<"Failed to get storage space: 1"<<endl;return;}
FNA->NdVal=thatLL.GetVal(1u);
unsigned int i;
Nd* temptr=FNA;
for(i=2u;i<=thatLL.Len();i++)
{
if((temptr->NdPtr=new Nd)==NULL) {cout<<"Failed to get storage space: "<<i<<endl;return;}
temptr=temptr->NdPtr;
temptr->NdVal=thatLL.GetVal(i);
}
temptr->NdPtr=NULL;
}
这是链表类的复制构造函数,为什么在4处调用thatLL成员函数时都出错了?编译器报错如下:
C:\Program Files\Microsoft Visual Studio\MyProjects\linked list\mainfile.cpp(38) : error C2662: 'Len' : cannot convert 'this' pointer from 'const class LL' to 'class LL &'
Conversion loses qualifiers
C:\Program Files\Microsoft Visual Studio\MyProjects\linked list\mainfile.cpp(40) : error C2662: 'GetVal' : cannot convert 'this' pointer from 'const class LL' to 'class LL &'
Conversion loses qualifiers
C:\Program Files\Microsoft Visual Studio\MyProjects\linked list\mainfile.cpp(43) : error C2662: 'Len' : cannot convert 'this' pointer from 'const class LL' to 'class LL &'
Conversion loses qualifiers
C:\Program Files\Microsoft Visual Studio\MyProjects\linked list\mainfile.cpp(47) : error C2662: 'GetVal' : cannot convert 'this' pointer from 'const class LL' to 'class LL &'
Conversion loses qualifiers
Error executing cl.exe.
呼唤高手现身!!

const对象不能调用非const成员函数。身为一个const对象的thatLL,而Len(),GetVal()均为非const成员函数,所以编译会出错。可以将Len(),GetVal()定义为const的。即:
Len()const; GetVal()const;