Array aus Objekten
-
nwp3 schrieb:
Einen Konstruktor der nichts tut kannst du einfach weglassen, den generiert der Compiler automatisch wenn du keinen angibst.
Jain, der wird vom Compiler generiert, keine Frage, aber auch nur (und genau der Fall ist eignetreten) wenn es keinen anderen Konstruktor gibt (ausser dem Kopierkonstruktor)
-
hm vllt versteh ich dich nur falsch, aber das würde hier keinen sinn machen, vllt hast du auch nur nicht alles gelesen, habe den default construktor schon eingebaut und es stellt mich auch zufrieden soweit.
versuche gerade alles auf vector um zustellen, habe da aber noch nicht soviel erfahrung, weiß nur das es ähnlich wie bei java ist
-
vllt sollte ich mit mal registrieren ^^°
habe folgende fehler meldung wenn ich vector versuche zu benutzen:
main.cpp: In Funktion »int main()«: main.cpp:32:4: Fehler: »vector« ist kein Element von »std« main.cpp:32:25: Fehler: expected primary-expression before »>« token main.cpp:32:27: Fehler: »team« wurde in diesem Gültigkeitsbereich nicht definiertcharakter a("name", 1, 12); vector<charakter> team; team.push_back(a);benutze ich das pushback richtig? warum die fehler meldung =

-
#include <vector>vergessen?
-
achso... entschuldigung ich dachte das gehört zum std... darum war ich verwundert weil ich using namespace std benutze und dann trotzdem ne fehlermeldung kam das es doch nicht dazu gehört...
wie benutzt man das push_back den richtig? gibt es dafür ein anschauliches beispiel vllt?
-
KanakAttack schrieb:
achso... entschuldigung ich dachte das gehört zum std...
Tut es auch.
wie benutzt man das push_back den richtig? gibt es dafür ein anschauliches beispiel vllt?
Ist doch oben schon. Wenn du eine ausführliche Erklärung zu vector möchtest, dann schau in ein C++-Buch deiner Wahl. Die STL ausführlich zu erklären ist zu viel für einen einzelnen Forenbeitrag. Siehe auch hier:
http://www.c-plusplus.net/forum/310212
Und insbesondere hier:
http://magazin.c-plusplus.net/artikel/Aufbau der STL - Teil 1%3A Container
-
Danke nochmal! bin viel weiter schon!
habe jetzt den default konstruktor, den destruktor weg gelassen, und alles läuft entsprechend mit vector... habe jetzt nur ein problem mit der ausgabe:
main.cpp:
#include "charakter.h"
using namespace std;int main(){
string name;
int lvl;
vector<charakter> Team;while(true){
int i;
cout << "Indexposition wählen[0-9]: ";
cin >> i;
if(i>=0 && i<=9){
cout << "Name des Charakters: ";
cin >> name;
cout << "Level des Charakters: ";
cin >> lvl;charakter newChar(name, i+1, lvl);
Team.push_back(newChar);
showChar(newChar);
}
else
cout << "Eingabe war nicht im Wertebereich!" << endl;
}
}charakter.cpp:
#include "charakter.h" using namespace std; void showChar(charakter c){ cout << c.Name << endl; } //getter! string charakter::getName(){ return Name; } int charakter::getId(){ return ID; } int charakter::getLvl(){ return LVL; } //konstruktor charakter::charakter(string Name, int ID, int LVL){ this->Name = Name; this->ID = ID; this->LVL = LVL; } //standart-konstruktor charakter::charakter(){}charakter.h:
#ifndef CHARAKTER_H #define CHARAKTER_H #include <cstdio> #include <cstdlib> #include <string> #include <iostream> #include <vector> using namespace std; class charakter{ private: public: string Name; int ID; int LVL; string getName(); int getId(); int getLvl(); void showChar(charakter c); charakter(string Name, int ID, int LVL); charakter(); }; #endifdas problem liegt bei showChar,

fehlermeldung ist:
main.cpp: In Funktion »int main()«: main.cpp:20:31: Fehler: Elementfunktion »void charakter::showChar(charakter)« kann nicht ohne Objekt aufgerufen werden make: *** [main.o] Fehler 1aber verstehe nicht was sein problem ist...
-
Du musst dich schon entscheiden, ob du eine freie Funktion showCharakter willst,
die einen übergebenen charakter anzeigt oder eine Memberfunktion, die sich selbst anzeigt.Lezteres wäre
public void showChar(); // in main newChar.showChar();
-
ich will aber ersteres
:p
-
- das
using namespace stdhat in Header Dateien nichts zu suchen, das solltest du entfernen
- die Membername, ID, LVLder Klassecharaktersollten privat sein
- um die Member zu initialisieren solltest du Initialisierungslisten benutzen
- der ParameternameimcharakterKonstruktor sollte den Typconst std::string&haben, und nicht per value übergeben werden
- du kannst die lokale VariablenewCharweglassen, indem du den Aufruf direkt in denpush_backAufruf verschiebst:vector<charakter> team; team.push_back( charakter( "Rumpel", i +1, 1 ) );- die Ausgabe hat mMn nichts in der Klasse
charakterzu suchen. EincharakterObjekt sollte nichts von Fenstern oder Konsolen wissen, daher würde ich die Implementierung als freie Funktion vorziehen