初始化vc类私有数据成员
1: class CStr
2: {
3: private:
4: char *pData;
5: int nLength;
6: public:
7: char *get(void);
8: int getlength(void);
9: void cpy(char *s);
10: void cat(char *s);
11: };
一开始我声明一个字符串操作类如上
cpy这个函数的声明如下
1: void CStr::cpy( char *s )
2: {
3: int n;
4: n=strlen(s);
5:
6: if(nLength!=n)
7: {
8: if(pData)
9: {
10: delete[]pData; <--报错1
11: }
12: pData=new char[n+1];
13: nLength=n;
14: }
15: strcpy(pData,s);
16: }
发现pData这个指针指向0xccccccc,所以if(pData)恒成立,因为>0
再看应用层声明
1: int _tmain(int argc, _TCHAR* argv[])
2: {
3: CStr Mystr;//声明对象
4:
5: Mystr.pData=0; <--初始化pdata成员数据,但是报错2
6: Mystr.cpy("Copy string2Arr!");
7: puts(Mystr.get());
8:
9: Mystr.cat("Add String2Str!");
10: puts(Mystr.get());
11:
12: printf("the sDatalen=%d \n",Mystr.getlength());
13: system("pause");
14: return 0;
15: }
我在上面初始化pdata报错,原来我们的数据成员pData是private,是私有成员,外部不能直接访问的
到现在我们发现问题所在,
1.报错1是因为我们没有初始化数据成员
2.报错2是因为我们想在外部初始化私有的数据成员
解决方案就是在public里面初始化私有的成员数据
1: class CStr
2: {
3: private:
4: char *pData;
5: int nLength;
6: public:
7: CStr()
8: {
9: pData = 0; <--初始化pData数据成员
10: }
11: char *get(void);
12: int getlength(void);
13: void cpy(char *s);
14: void cat(char *s);
15: };
到现在报错问题彻底解决