0

再一次(可能是微不足道的)问题让我发疯了。我刚刚花了 4 个小时试图找出正在发生的事情,但没有成功。这就是为什么我再次向社区寻求帮助的原因。

在阅读了初步答案并进行了更多调试后,我不得不编辑问题:

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(some parameters) 实际上做了它应该做的事情——它将正确的值分配给 A 的成员。在离开 A 之后,分配的值似乎超出了范围,因此 someA.someMember 输出了某事。像 -9.345345e+ 等 - 意味着该成员尚未初始化,尽管我实际检查过并且 someMemer 被赋予了正确的值。

有没有人遇到过这样的事情?

4

2 回答 2

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
}
于 2012-12-09T11:58:33.250 回答
1

int ina用作 的构造函数参数B。但在里面,你使用someA.seta(a);设置字段值。

但是你真正想要使用的是someA.seta(ina);为了使用构造函数参数值来初始化'a'。

于 2012-12-09T12:00:57.687 回答