首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教这个程序如何错了

2012-02-22 
请问这个程序怎么错了#includeiostreamusingnamespacestdclassa{public:a(){a12a23}voidseta1(inti

请问这个程序怎么错了
#include   <iostream>
using   namespace   std;

class   a
{
public:
a()
{
a1=2;
a2=3;
}
void   seta1(int   i,   a*   oa=this)
{
oa-> a1=i;
}
void   seta2(int   i)
{
a2=i;
}
void   printa()
{
cout < <a1 < <a2 < <endl;
}
protected:
int   a1;
int   a2;
private:
};

int   main()
{
a   oa1,oa2;
oa1.printa();
oa1.seta1(5,&oa2
);
oa2.printa();
system( "pause ");
return   0;
}

提示说
c:\documents   and   settings\liutong\my   documents\visual   studio   2005\projects\test1\test1\main.cpp(12)   :   error   C2355:   'this '   :   can   only   be   referenced   inside   non-static   member   functions
但我这个不是静态函数啊。。
还有我这个例子的目的是看看同类的对象有没有办法互访问私有成员。。。有人说能有人说不能。。。有没有正确的答案啊。。。

[解决办法]
void seta1(int i, a* oa=this)
{
oa-> a1=i;
}

-----

不能这么写

改成

void seta1(int i, a* oa=0)
{
if (a == 0)
a = this;
oa-> a1=i;
}
[解决办法]
this指针只能在非静态成员函数体内(注意是内)使用,只有当确定的对象调用成员函数时this才会有具体的值(即该对象的地址),当然不能用来指定缺省参数。再说缺省参数也只能用常量来指定呀

热点排行