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 は sth を出力します。-9.345345e+ など - 実際にチェックして someMemer が適切な値を割り当てられたにもかかわらず、メンバーが初期化されていないことを意味します。

誰もこのようなことに遭遇したことがありますか?

4

2 に答える 2

1

setaorの実装に問題があると、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
}
于 2012-12-09T11:58:33.250 に答える
1

int inaのコンストラクタ パラメータとして使用しますB。ただし、内部ではsomeA.seta(a);、フィールド値を設定するために使用します。

しかし、実際に使用したいのはsomeA.seta(ina);、コンストラクターのパラメーター値を使用して「a」を初期化することです。

于 2012-12-09T12:00:57.687 に答える