map als funktionsparameter
-
hallo leutz,
ich bin scheinbar zu doof dazu. ich hoffe das hier paar brainbugs mir helfen können
class LISTE { privat bool enabled; // und noch mehr lauter so sachen }; map<string, shared_ptr<LISTE> > liste; void SetAktiv(map<string, shared_ptr<LISTE> > aaa) { //zuerst alle in liste befindlichen elemente auf disabled setzen => enabled=false; //dann aaa auf enabled=true setzen aaa->enabled=true; } int main(..) { liste["Liste01"].reset(new LISTE()); liste["Liste02"].reset(new LISTE()); liste["Liste03"].reset(new LISTE()); SetAktiv(liste["Liste02"]); return 0; }
also so irgendwie wollt ichs hinbekommen,
ab hier gehts los mit fehler:
SetAktiv(liste["Liste02"]);
-
Hallom,
schreib das mal so:
void SetAktiv(map<string, shared_ptr<LISTE> >& aaa) // Als Referenz
Ansonsten hast du eine Kopie in der Funktion, die beim Verlassen wieder zerstört wird.
-
Wie soll SetAktiv auf ein privates Element von LISTE zugreifen können?
-
um
SetAktiv(liste["Liste02"]);
zu ermoeglichen muesste er die funktion doch folgendermassen deklarieren:
void SetAktiv ( LISTE*& );
falls ich mich irre duerft ihr mich natuerlich schlagen, ansonsten feiert mich.
-
das hatte ich zuerst so, aber da bekam ich das und blickte nicht durch
error C2664: 'SetAktiv' : Konvertierung des Parameters 1 von 'class boost::shared_ptr<class LISTE>' in 'class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::shared_ptr<class LISTE>,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<class boost::shared_ptr<class LISTE> > > &' nicht moeglich Ein Verweis, der nicht auf ein 'const' zeigt, kann nicht an einen Wert gebunden werden, bei dem es sich nicht um einen L-Wert handelt
@operator void
jo da haste natürlich recht, allerdings war das jetzt frei getippt um alles möglichst klein und verständlicher zu beschreiben. stell dir einfach vor es sei publictechnisch habe ich eine map liste wo ich meine listen eintrage und immer nur eine aktiv sein soll. mit der SetAktiv() setze ich alle false und die übergebene dann halt aktiv.
kompliziert
-
Also wenn ich mich nicht total irre musst du deinen Parameter ändern.
void SetActive(boost::shared_ptr<LISTE> &); //oder auch ohne referenz //oder aber void SetActive(LISTE *); //und dann mittels SetActive(mymap["Liste1"].get());
Denn du übergibst ja keine std::map an die Methode. Du greifst mit dem []operator auf eine Instanz von boost::shared_ptr<LISTE> zu.
-
danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke danke
es geht
ihr habt einen armen idioten überglücklich gemacht
-
wie kann es anders sein, noch ne frage:
void SetAktiv(shared_ptr<GUI_Element> &name) { } map<string, shared_ptr<GUI_Element> >::iterator it = e_element.begin(); while(it != e_element.end()) { SetAktiv(?????); // was muss hier rein? }
-
SetAktiv(it->second);