001
19.07.2006, 22:17 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
Hi, du hast mir meinen letzten Rat, den gültigkeitsbereich von Variablen anzusehen, immer noch nicht beherzigt, sonst hätteste die letzte Frage nicht mehr gestellt bzw wäre diese geklärt.
Also, anhand eines Beispiels:
datei.cpp
C++: |
#include <stdio.h>
int a; // global gültig, in allen cpp-dateien
static int b; // global, aber nur in dieser datei (modul) gültig
void funktion() { int c; // nur in dieser funktion gültig und bei jedem aufruf neu static int d; // nur in dieser funktion gültig aber bei jedem aufruf identisch
int b; // <- ab hier gilt obiges b nicht mehr, d.h wenn man jetzt b etwas zuweist, wird das lokale b genommen, nicht das globale! }
class klasse { int c; // membervariable, für jede instanz der klasse static int d; // klassenvariable, für alle instanzen der klasse void funktion() // lokale funktion { int e; // lokale variable, nur innerhalb der funktion gültig! } }
|
Wenn du nun
C++: |
class Project { public: Project(string FileName) { BombLaunchList *BombList=new BombLaunchList; // lokal } ~Project() { delete BombList; } BombLaunchList *BombList; // member ...
|
schreibst, ist das im Konstruktor definierte eine NEUE lokale Variable, d.h du weist nur der im Konstruktor definierten "BombList" eine neue instanz zu. die Membervariable "BombList", wird durch die lokale überdeckt!
Ansonsten, dein anderes Problem ist folgendes: der operator[] gilt nur für list<T>, nicht für einen pointer darauf:
C++: |
list<string> A; list<string> *B = &A;
|
d.h B[0] zeigt auf A, nicht auf das 0-te element vom inhalt der liste. B[1] würde auf den Speicherbereich A+sizeof(A) zeigen, was in dem fall dann sonst wohin zeigt nur nicht dahin wo gültiger speicher ist.
Wie dem auch sei: du musst entweder dann
schreiben, oder besser:
oder eben BombList->at(0-x) benutzen (sollte "at" sein, so in der art sollte es heißen) -- class God : public ChuckNorris { }; |