读书人

请教这个程序如何错了

发布时间: 2012-02-22 19:36:55 作者: rapoo

请问这个程序怎么错了
#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才会有具体的值(即该对象的地址),当然不能用来指定缺省参数。再说缺省参数也只能用常量来指定呀

读书人网 >C++

热点推荐