Dynamische Arrays in Klassen

Hallo, ich habe folgendes Problem:

Ich steige mehr oder weniger von C auf C++ um und möchte erste Erfahrungen mit Klassen sammeln. Wärend der Umsetzung eines Programms trat nun folgender Fehler auf:

Mein Compiler(DevC++) zeigt mir immer einen Syntax-Error an in folgendem Programm:

#include 
#include **class** blah **{  
  
 public:**  
  
**void** getstr**() {**

 std::cout \> input\_cont;
 transform**(**input\_cont.begin**()**, input\_cont.end**()**, input\_cont.begin**()**, ::tolower**)**; 
 std::cout \> rand\_key\_length;
**new int \*** rand\_key**[**input\_cont.length**()]**;
 if **(**rand\_key\_length ()) {
 std::cout () }
 std::cout (rand\_key**)** }

**private:**
 std::string input\_cont;
**int** rand\_key\_length, rand\_key;

};

**int** main**() {**

 blah test;
 test.getstr**()**;
 return 0;
**}**

Der Fehler lautet wie folgt:

14 J:\coding\clstesting.cpp expected `;’ before „rand_key“

Es ist nur ein Abstrahierter Teil des ganzen Programms, ich denke mal die Funktionen sind nicht schwer zu verstehen. Ich weiß, dass es nicht streng objektorientiert ist, aber irgentwo muss man ja mal anfangen.

Ich weiß echt nicht wo dort das Problem liegt, habe die Syntax ausserhalb einer Klasse genauso problemlos genutzt.

Für Problemlösungen und tipps für meinen Programmierstil bin ich dankbar :smile:

MFG

Howdy,

mal abgesehen, dass
#include
fehlt, ist das Hauptproblem die Zeile

 new int \*rand\_key[input\_cont.length()];

Wenn du hier ein dynamisches Array von ints erzeugen moechtest, dann gibt es mehrere Optionen. Die einfachste fuer dich ist einfach #include zu inkludieren. Dann vereinbarst du eine Instanzvariable m_vVector, die du im Constructor initialisierts.

 public: 
 blah() 
 : m\_vVector()
 {
 }
 ...
 std::vector m\_vVector;

An der Stelle des new schreibst du dann sowas wie m_vVector.resize(input_cont.length());

Gruss
norsemanna

oder wenn es ein normales dynamisches Array sein soll dann:

 int \*rand\_key = new int[input\_cont.length()];

(Speicherfreigabe nicht vergessen :wink:)

Gruß
VoidZer0

Danke für eure Antworten.
Warum funktioniert es nicht, zuerst die Variable privat zu deklarieren um dann mit einer Methode das Ganze dynamisch zu machen? Die Lösung

int *rand_key = new int[input_cont.length()];

funktioniert nur in der Methode, jedoch nicht in der Deklaration.

In den Lösungsvorschlag mit Vektoren muss ich mich erst noch reinarbeiten, sieht bis jetzt interessant aus.

Die Lösung

int *rand_key = new int[input_cont.length()];

funktioniert nur in der Methode, jedoch nicht in der
Deklaration.

Was meinst du damit konkret?
Wo (in welchem Teil der Klasse) deklarierst du rand_key und wo initialisierst du ihn?

Hallo noir

int *rand_key = new int[input_cont.length()];

funktioniert nur in der Methode, jedoch nicht in der

So geht’s jedenfalls:

class blah {
 public:
 blah() :
 rand\_key( new int [input\_cont.length()])
 {
 if (!rand\_key) {;}
 }
 private:
 int \*rand\_key;
 // war zuvor kein Zeiger: rand\_key;
};

lG
Martin B