problem mit 2d vector bzw
-
ich habe vorher noch nie mit klassen gearbeitet und wollte nun einen dyn. 2d vector machen mithilfer einer solchen klasse:
long double k_rechnung(vector<char> vc) { class vec { public: char zahl; int pos; }; vector<vec> k_temp; vec.tmp_var; for(int i = 0; i < vc.size(); i++) { if(vc[i] == '(') { klammer(vc, i); temp_var.zahl = mdas_rechnung(vc); temp_var.pos = pos_klammer_a; k_temp.push_back(temp_var); } } return temp_var; }
aber irgendwie funkioniert das nicht so:
/home/ceberus/tr_sim_01/src/tr_sim_01.cpp:277: error: template-argument
k\_rechnung(std::vector<char, std::allocator<char> >)::vec' uses local type
k_rechnung(std::vector<char, std::allocator<char> >)::vec'
/home/ceberus/tr_sim_01/src/tr_sim_01.cpp:277: error: template argument 2 is invalid
/home/ceberus/tr_sim_01/src/tr_sim_01.cpp:277: error: ISO C++ forbids declaration ofk_temp' with no type /home/ceberus/tr\_sim\_01/src/tr\_sim\_01.cpp:278: error: syntax error before
.' token
/home/ceberus/tr_sim_01/src/tr_sim_01.cpp:283: error:temp_var' undeclared (first use this function) /home/ceberus/tr\_sim\_01/src/tr\_sim\_01.cpp:283: error: (Each undeclared identifier is reported only once for each function it appears in.) /home/ceberus/tr\_sim\_01/src/tr\_sim\_01.cpp:285: error: request for member
push_back' in `k_temp', which is of non-aggregate type `int'
/home/ceberus/tr_sim_01/src/tr_sim_01.cpp:316:129: warning: no newline at end of file
*** Beendet mit Status: 2 ***weiß jemand warum und wie man das behebn könnte, thx
-
du kannst doch eine klasse nicht in einer funktion deklarieren !!!!
-
long double k_rechnung(vector<char> vc) { class vec { // Was soll diese Klasse hier? (Siehe dazu Blackhacks-post) public: char zahl; int pos; }; vector<vec> k_temp; vec.tmp_var; // Was soll das hier? wenn dan sowas: vector<vec> tmp_var; for(int i = 0; i < vc.size(); i++) { if(vc[i] == '(') { klammer(vc, i); temp_var.zahl = mdas_rechnung(vc); // Fehler bzg. obiger Deklaration temp_var.pos = pos_klammer_a; // Fehler " " " und wo ist pos_klammer a deklariert? (global?) k_temp.push_back(temp_var); // Fehler, du kannst so keinen ganzen Vektor anhängen. } } return temp_var; }
[/quote]
-
Doch, man kann Klassen innerhalb Funktionen definieren (obwohl das in meinen Augen nur bei speziellen Template-Anwendungen einen echten Sinn hat). Allerdings sind lokale Klassen auch nur innerhalb der Funktion sichtbar, und daher kann ein std::vector<vec> schon mal nicht erzeugt werden. Das wären die ersten drei Fehlermeldungen. Lösung: class vec vor der Funktion deklarieren und nicht in ihr.
Nächster Fehler: "vec.tmp_var" ist völliger Unsinn, du meintest wohl eher "vec temp_var", oder? Und schließlich ist der Rückgabewert falsch. Wenn du long double zurückgeben willst, kannst du nicht temp_var zurückliefern, das ja vom Typ vec sein soll. Und was du insgesamt mit diesem Codeausschnitt erreichen willst, erschließt sich mir auch nicht direkt, Anzeichen für einen 2d-Vector kann ich hier nicht wirklich erkennen?
-
danke für die vielen antworten!!
Nächster Fehler: "vec.tmp_var" ist völliger Unsinn, du meintest wohl eher "vec temp_var", oder?
uups schreibfehler
Und schließlich ist der Rückgabewert falsch. Wenn du long double zurückgeben willst, kannst du nicht temp_var zurückliefern, das ja vom Typ vec sein soll.
peinlic
Und was du insgesamt mit diesem Codeausschnitt erreichen willst, erschließt sich mir auch nicht direkt, Anzeichen für einen 2d-Vector kann ich hier nicht wirklich erkennen?
hast du einen besseren vorschlag??? bin für alles offen. zumindest hab ich jetz keine fehler mehr
(mehr oder weniger
)
-
Naja, wenn du einen zweidimensionalen Vektor brauchst, kannst du z. B. das hier verwenden:
vector< vector< typ > > 2dvec;
Ansonsten hätte die boost-Library (www.boost.org) einen multi_array zu bieten, der ist allerdings afaik nicht dynamisch in seiner Größe...
-
und wozu haben die dann einen eigenen arraytyp geamacht
und ein vector in einem vector???naja ich dahte das wenn ich eine klasse/struct in nen vector packe, hab ich einen guten ersatz,
ABER wenn du meinst das das keiner ist...das war auch der grund weil ich die klasse in die funktion gepackt habe.
[/code]
/*
ich hab mich boost bisher nur auseinander gesetzt als ich in erfahrung bringen wollte wie man am einfachsten eine dateisuche bewerkstelligt.
*/
[code]