ここに私のコードです。私はELEM構造体のためのリファレンスを使用する場合はマイマップは、そうでない場合、私は正しい値を取得し、空になります。C++なぜ参照を使用する場合、私のマップ<string、string>を空にするのですか?
#include <cmath>
#include <cstdio>
#include <stack>
#include <map>
#include <iostream>
#include <string>
using namespace std;
struct ELEM;
struct ELEM {
map<string, ELEM> Children;
map<string, string> Attributes;
};
int main() {
stack<ELEM> elements;
ELEM root;
elements.push(root);
ELEM elem1;
elements.push(elem1);
elements.top().Attributes["attr1"] = "val1";
elements.top().Attributes["attr2"] = "val2";
ELEM &elem2 = elements.top(); // here is the problem ???
elements.pop();
elements.top().Children["child1"] = elem2;
cout << elements.top().Children["child1"].Attributes.size() << endl;
// i get '0'
return 0;
}
あなたは私を説明でき、問題は何ですか? おかげ&
で
私はVisual Studioを使用しています2015 – barnus1983
あなたは今破壊された要素をポップしました。 –
要素を固定するには、elem2を 'const ELEM&'にする必要があります。それ以外の場合は、それは不快です。あなたは 'ポップ 'の後に破壊された価値を得ている –