Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Array-Grösse in einem Objekt

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.05.2006, 08:50 Uhr
flappinski



Ich habe schon wieder so eine Anfängerfrage:
Wenn ich ein Array von einem int deklariere, dann ich die Grösse ja abhängig von einer Variablen machen, z.Bsp.:

C++:
int a=10;
int b[a];



Jetzt will ich ein Array in einem Objekt deklarieren:


C++:

class Obj1 {
public:
  string      name;
  int         value_arr[10];
};




Jetzt will ich diese Arraygrösse wiederum abhängig von einer Variable machen, also in der Art

C++:

class Obj1 (int a) {
public:
  string      name;
  int         value_arr[a];
};




Wenn das jetzt funktionieren würde, bräuchte ich keine dummen Fragen zu stellen, tut es nämlich leider nicht . Im Moment behelfe ich mit mit einem Vektor:

C++:

class Obj1 {
public:
  string      name;
  vector<int>         value_arr;
};




nur weiss ich halt vorher ganz genau , wie gross das Array ist und das Objekt wird dann später auch als ein ziemllich grosses Array deklariert, alle Grössen sind zur Laufzeit des Programms fest, ein Vektor ist also eher Verwschwendung.
Danke schon mal,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.05.2006, 09:35 Uhr
0xdeadbeef
Gott
(Operator)



Zitat von flappinski:
Ich habe schon wieder so eine Anfängerfrage:
Wenn ich ein Array von einem int deklariere, dann ich die Grösse ja abhängig von einer Variablen machen, z.Bsp.:

C++:
int a=10;
int b[a];




Auch wenn manche Compiler entsprechende Erweiterungen haben, nein, ISO-C++ erlaubt das nicht. Was geht, ist

C++:
int const a=10;
int b[a];


...aber das ist ja nur begrenzt hilfreich. Es gibt hier zwei Methoden, da klassentechnisch ranzugehen. Erstens: Dynamisch Speicher anfordern, das Freigeben nicht vergessen:

C++:
class Obj1 {
public:
  Obj1(size_t size) { value_arr = new int[size]; }
  ~Obj1() { delete[] value_arr; }

  string      name;
  int         *value_arr;
};

// ...
int a = 10;
Obj1 obj(a);


2. wenn die Größe zur Compilezeit feststeht:

C++:
template<size_t size> class Obj1 {
public:
  string name;
  int value_arr[size];
};

// ...

Obj1<10> obj;


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: