Ungewollt read-only structure erschaffen
-
Hallo,
in meinem Programm kommen folgenden Zeilen Code vor:
set< pair<set<int>, node*> >::iterator it = part_nodes[0]->subs.grouped_subs.begin(); it->second = NULL; pair<set<int>, node*>* p = &(*it);Die erste Zeile ist offensichtlich nur mit längeren Erklärungen verständlich. Von daher hoffe ich, dass hier erst einmal genügt festzustellen, dass
- der Compiler keine Fehlermeldung für sie ausgibt, die Initialisierung von "it" also (für den Compiler) durchführbar ist,
- "node" irgendeine Klasse istFür die zweite Zeile erhalte ich allerdings
assignment of data-member ‘std::pair<std::set<int, std::less<int>, std::allocator<int> >, node*>::second’ in read-only structure
und für die dritte
invalid conversion from ‘const std::pair<std::set<int, std::less<int>, std::allocator<int> >, node*>’ to ‘std::pair<std::set<int, std::less<int>, std::allocator<int> >, node>*’
Weiß jemand, was hier passiert? "it" ist doch ein Iterator auf ein
set< pair<set<int>, node*> >Wo ist hier irgendetwas read-only / konstant?
-
Der Schlüssel ist konstant, und zwar generell bei assoziativen Containern, da sich beim Ändern des Schlüssels die Ordnung innerhalb der Datenstruktur ändern könnte. Dies könnte der Container nicht abfangen, würde dabei also inkonsistent.
Da bei einem Set der Schlüssel gleichzeitig der Wert ist, ist dieser auch konstant.