vector Problem
-
Hallo!
Wie kann ich eine private Membervariable vom Typ vector:
vector<Attack* attack> attacks
initialisieren bzw. so weit bringen, dass kein seg_fault bei einem push_back bzw. jeder anderen vector-Funktion mehr auftritt?Hoffe iwer kann mir helfen

lg
-
Das passiert automatisch, dein Fehler ist woanders. Ohne Code kann man natürlich nicht mehr sagen.
-
vector<Attack* attack> attacks
Allein das sieht schon schrecklich falsch aus...
-
HighLigerBiMBam schrieb:
vector<Attack* attack> attacks
Allein das sieht schon schrecklich falsch aus...
kannst du das auch begründen?
-
ind das <> gehört ein TemplateTyp ... du hast da 2 drinstehen .. warscheinlich meinst du nur Attack* (nen pointer auf deine Klasse Attack) .. und begründen tuts die vector-API.
*
-
Weil bei mir der Compiler 4 Fehler auswirft und es falsch ist. Das Template erwartet einen Typen du gibst ihm einen deklaration. Wenn überhapt wäre es wie folgt richtig:
vector<Attack*> attacks;Wobei du höchst wahrscheinlich keinen Pointer dort benötigst und es für dich so:
vector<Attack> attacksrichtig wäre.
-
ah ok, hab hier im forum nicht so auf die syntax geachtet^^
komisch ist aber eines bei der ganzen sache:
er lässt mich einfach nicht auf membervariablen vom typ vector zugreifen.
wenn ich sie direkt in der methode erstelle gehts aber einwandfrei.
-
Hast du dafür mal ein Beispiel mit Code und passenden Fehlermeldungen?
-
Anton901 schrieb:
ah ok, hab hier im forum nicht so auf die syntax geachtet^^
komisch ist aber eines bei der ganzen sache:
er lässt mich einfach nicht auf membervariablen vom typ vector zugreifen.
wenn ich sie direkt in der methode erstelle gehts aber einwandfrei.dann zeig doch endlich den Code. Unsere Glaskugeln sind derzeit in der Reinigung.
-
Das ist die .h Datei:
class AttackDB { private: int attack_counter_; std::vector<Attack> attack_ ; public: AttackDB(); virtual ~AttackDB(); //Attack* getAttack(unsigned int id); void setAttack(Attack* attack); };Methode:
void AttackDB::setAttack(Attack* attack) { attack_.push_back(*attack); }
-
lass das pointer gefrickel und nimm ne refrenz
void DBAttack::setAttack(Attck const& a) { this->attack_.push_back(a); }dein parameter darf ja eh nie NULL sein, da du ihn ja in deiner version dereferenzierst (und da skönnte nen segment fault geben...)
also dass vector fehlerhaft ist bezweifle ich sehr...
und selbst die handhabung ist idiotensicher, wenn mans nicht provoziertz.b. durch
vector<int> vec; cout << vec[184] << endl;
-
Warum arbeitest du da mit Pointern, wenn der Vector mit Kopien arbeitet?
-
Hm, wo kann dann der Fehler liegen?
Die Attacke wird fehlerfrei übergeben und wenn ich irgendwas mitm vector machen will, dann gibts nen seg_fault.
-
Was machst du denn mit dem vector? Und arbeitest du wirklich mit dem selben Objekt, dem du die Attacke übergeben hast?
-
Ich mach nix anderes mit dem vector, als das Reinspeichern in dieser Methode.
Und ja, dwenn ich in der set-Methode die Attacke anschau, ist diese die übergebene.
-
Und wo passiert das hier?
Anton901 schrieb:
wenn ich irgendwas mitm vector machen will, dann gibts nen seg_fault.
Ansonsten würde ich eher vermuten, daß der Fehler in der Attack-Klasse liegt. Verwendest du in der Klasse dynamischen Speicher oder vergleichbares? Wenn ja, hast du auch an die "Regel der 3" eingehalten (Kopier-Konstruktor, Zuweisungsoperator und Destruktor brauchst du entweder alle oder gar nicht).
-
Um das zu beurteilen wäre es nützlich zu wissen wie Attack definiert ist.
-
Hab den Fehler gefunden, der war natürlich ganz wo anders

Danke für eure Hilfe.