Hier ist mein Code. Meine Karte ist leer, wenn ich Referenz für ELEM Struktur verwenden, sonst i richtigen Wert erhalten:C++ warum leere meine map <string, string> wenn ich referenz verwende?
#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;
}
Können Sie mir erklären, was ist das Problem? Dank
Ich benutze Visual Studio 2015 – barnus1983
Sie poppe das Element, das jetzt zerstört ist, und Sie haben eine baumelnde Referenz. –
Wenn Sie das Element anheften wollen, müssen Sie elemm2 'const ELEM &' machen. Weil es sonst verschwindet. Du bekommst rvalue, der nach 'pop' zerstört wird. –