Struct mit dynamischen Array (AnisString)
-
Hallo,
ich ein NewBe in der C++ Scene und habe eine Frage. Nutze den C++ Builder von GodeGear falls das wichtig ist.
Ich habe bei mir eine Headerdatei mit folgenden Code:
typedef struct { int iPa[]; AnsiString ccValue[]; } PA_VALUE;
Wichtig für mich ist, dass die Inhalte iPa und ccValue dynamisch groß sein muss.
Bei der Instanzierung der Struktur sollen die Variablen-Arrays mit einer unterschiedlicher Anzahl an Daten gefüllt werden.Ich habe es folgendermaßen probiert:
const PA_VALUE test = { {1024,124},{"Ein","Aus"} };
Ich erhalte beim befüllen aber einen Fehler.
Was mache ich verkehrt und wie gelingt es mir dennoch?
Bitte um Hilfe.
-
Dynamische Arrays kriegst du mit new/delete hin (in C: malloc, realloc, calloc).
-
Aha, und das geht dann wie?
-
Hans-Peter schrieb:
Ich erhalte beim befüllen aber einen Fehler.
Dein Code funktioniert bei mir (C++Builder 2006).
Für dynamische Arrays im eigentlichen Sinne, also solche, deren Größe zur Laufzeit anpaßbar ist, nimm bitte std::vector und nicht irgendeine leckanfällige Eigenbaulösung mit new/delete/malloc/realloc/free.
-
So, mein Header sie wie folgt aus:
typedef struct { std::vector<int> iParameter; std::vector<AnsiString> asValue; } PARAMETER_VALUE;
Wie kann ich nun der Struktur bei der initialisierung Werte zuweisen?
-
Indem du im Konstruktor die entsprechenden Methoden von std::vector aufrufst.
-
Ah,
allerdings habe ich mir das anderes erhofft.
Eine Methode lässt sich an dem Punkt des Programms nicht einbinden. Aber ich habe schon eine andere Lösung mit der Zeigerarithmetik hinbekommen.
Danke euch allen.
-
Hans-Peter schrieb:
Eine Methode lässt sich an dem Punkt des Programms nicht einbinden
Im Konstruktor läßt sie sich einbinden, und da gehört sie auch hin.
Hans-Peter schrieb:
Aber ich habe schon eine andere Lösung mit der Zeigerarithmetik hinbekommen.
Gut, daß du uns auch sagst, welche
-
Hallo
Und da wir hier C++ und nicht C programieren, verwende bitte auch aktuelle Syntax
struct PARAMETER_VALUE { std::vector<int> iParameter; std::vector<AnsiString> asValue; };
bis bald
akari