构造对象时的奇怪行为(在C ++中)

时间:2012-12-09 11:55:58

标签: c++ object

再次(一个可能是微不足道的)问题让我疯狂。我花了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值,但该成员还没有初始化。

以前有人遇到过这样的事吗?

2 个答案:

答案 0 :(得分:1)

setageta的错误实施很容易导致这种情况发生 - 假设您的意思是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'。