再次(一个可能是微不足道的)问题让我疯狂。我花了4个小时试图找出什么是goint但是没有成功。这就是为什么我再次向社区寻求帮助。
在阅读了初始回答并进行更多调试后,我不得不编辑问题:
class A{
friend class B;
int someMember;
void setA(some paremeters);
};
class B{
public:
A someA;
B(some parameters){
someA.setA(some parameters);
std::cout<<someA.someMemeber;
}
};
使用调试器向我展示了someA.setA(一些参数)实际上做了它应该做的事情 - 它为A的成员提供了正确的值。在离开A之后,指定的值似乎超出范围,因此someA.someMember输出......喜欢-9.345345e +等等 - 这意味着尽管事实上我已经检查过,并且someMemer被赋予了propper值,但该成员还没有初始化。
以前有人遇到过这样的事吗?
答案 0 :(得分:1)
seta
或geta
的错误实施很容易导致这种情况发生 - 假设您的意思是void printa(){cout<<someA.geta();}
而不是void printa(){cout<<A.geta();}
。
例如,seta
实际上并未设置该成员。它可能是空的,或者一个简单的菜鸟错误可能是:
void seta(int x)
{
int a = x; //doesn't set the member, but a local variable
}
答案 1 :(得分:1)
您使用int ina
作为B
的构造函数参数。但在内部,您使用someA.seta(a);
来设置字段值。
但你真正想要使用的是someA.seta(ina);
,以便使用构造函数参数值初始化'a'。