65,189
社区成员




#include<iostream>
using namespace std;
class parent;
class child
{
public:
child(int x,int y,parent* p)
{
mX = x;
mY = y;
mp = p;
}
~child(){};
int mX;
int mY;
parent* mp;
};
class parent
{
public:
child mChild;
parent():
mChild(1,2,this){};
~parent(){};
void showData()
{
cout<<"child x:"<<mChild.mp->mChild.mX<<endl //vs2010下输出正常
<<"child y:"<<mChild.mp->mChild.mY<<endl //vs2010下输出正常
<<"parent Address:"<<(int)mChild.mp<<endl //vs2010下输出和realAddress是一致的
<<"parent realAddress:"<<(int)this<<endl;
}
};
int main()
{
parent p;
p.showData();
system("pause");
}
child(int x,int y,parent* p)
{
mX = x;
mY = y;
mp = p;
}
中,没有拿指针p去做一些其他事情。
[/quote] child(int x,int y,parent* p)
{
mX = x;
mY = y;
mp = p;
}
中,没有拿指针p去做一些其他事情。
[/quote]
我的描述不太对,你的代码没有问题的原因,应该是你在这段代码
child(int x,int y,parent* p)
{
mX = x;
mY = y;
mp = p;
}
中,没有拿指针p去做一些其他事情。
[/quote]
我的描述不太对,你的代码没有问题的原因,应该是你在这段代码
child(int x,int y,parent* p)
{
mX = x;
mY = y;
mp = p;
}
中,没有拿指针p去做一些其他事情。
[/quote]
-wall 呢?
不知道vc2010 为啥这样警告[/quote]
打开 -Wall 编译的。
我猜 vs 是想跟你说,虽然你主楼的代码没有问题,但是将 this 随便传的话很容易出问题,比如 child 的构造函数要是这样的话,就是 UB 了。没事和完蛋在代码上可能只有很小的差别,因此 vs 提醒你一下。
child(int x,int y,parent* p)
{
mX = x;
mY = y;
mp = p;
p->showData();
}
[/quote] child(int x,int y,parent* p)
{
mX = x;
mY = y;
mp = p;
}
中,没有拿指针p去做一些其他事情。
[/quote]
child(int x,int y,parent* p)
{
mX = x;
mY = y;
mp = p;
p->showData();
}
[/quote]
child(int x,int y,parent* p)
{
mX = x;
mY = y;
mp = p;
p->showData();
}
child(int x,int y,parent* p)
{
mX = x;
mY = y;
mp = p;
}
中,没有拿指针p去做一些其他事情。