2016-12-28 3 views
-2

グローバルクラスインスタンスの値を変更します。は、私は、このクラス定義有する

class event { 
public: 
wstring type; 
int pos; 
int sen; 

event(const string &t) : type(util::string2wstring(t)) {} 
~event() {}; 

を}。

とグローバル変数:

list<event> events; 

この変数は、1つの関数に初期化し、その後、私はのように、このイベントの貴様値を変更したい:最初のcoutの印刷後

for(auto ei : events) { 
    ei.pos = (*w).get_position(); 
    ei.sen = sen; 
    cout << "pos: " << ei.pos << " in sentence " << ei.sen << endl; 
    ++w; 
    ++sen; 
} 
event ei = events.front(); 
cout << "pos2: " << ei.pos << " in sentence2 " << ei.sen << endl; 

新しいposとsenの値は正しいが、スコープの外側の2番目の値は最も古い値を出力する。

他の機能で値を印刷すると、最も古い値が印刷されます。

問題はグローバル変数への参照アクセスではないと思いますが、それは本当ですか?

そして最も重要なのは、どのように修正できますか?

ありがとうございます。

よろしくお願いいたします。

+0

、このような問題を解決するための適切なツールは、あなたのデバッガです:あなたはそれを指定する必要がリファレンスを使用するには

。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

+0

それは真実ではありません。私は私のプログラムをデバッグし、私は参照のないアクセスの問題を発見します。私の問題を見るための答えを見てください。 :) –

+0

[MCVE]に行く。 –

答えて

1

range-for loopeiの値がであり、参考ではありません。つまり、コンテナ内の要素のコピーであり、コースのコピーを変更しても元の内容は変更されません。

for(auto& ei : events) { ... } 
// ^
// Note ampersand here 
+0

は約答えていた –

+0

はい!それは動作します。どうもありがとうございます :) –

関連する問題