Newsgroup: it.comp.lang.c++
Titolo: Inizializzazione di una struttura

Ciao a tutti,
Scusate la domanda un po' banale, ma sono nuovo alla programmazione C++ e
vorrei sapere questo:
In C si poteva definire una struttura tipo:
 struct dataa { int a;
                      float b;
                      long c;
                      int d;};
 struct dataa sa[127] = {
                                    {1, 54.2, 21, 2},
                                    {5, 45.4,  2, 44},
                                     [CUT]
                                     };
In c++ la struttura "dataa" č definita all'interno di una mio oggetto
class a
        {
        [CUT]
        private:
         struct dataa { int a;
                              float b;
                              long c;
                              int d;   };
          struct dataa sa[127];
        [CUT]
        }
come posso preinizializzarla senza dover scrivere nel costruttore qualcosa
come
    dataa[0].a = 1;
    dataa[0].b = 54.2;
    dataa[0].c = 21;
    dataa[0].cd= 2;
    [CUT]
    data[127].........
considerando anche che la mia struttura č un po' piů complessa dei 4 tipi
dell'esempio ?
Grazie per l'aiuto
Giuliano



 come
Risposta breve: non si può.
Risposta più articolata: sei sicuro che ti serva un array di strutture? Il 
problema non potrebbe essere risolto con un array di oggetti, che vengon 
inizializzati dal costruttore di default?
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

 ha scritto nel messaggio
news:JlfMb.33161$Jw2....@tornado.fastwebnet.it...
[CUT]
|
| Risposta più articolata: sei sicuro che ti serva un array di strutture? Il
| problema non potrebbe essere risolto con un array di oggetti, che vengon
| inizializzati dal costruttore di default?
In realtà questo vettore mi serve gia per creare parecchi oggetti e i dati
del vettore servono al costruttore dell'oggetto per inizializzarlo.
L'alternativa mi pare di capire che è un bel "switch" con N righe di codice
piene di new o altrettante per inizializzare il vettore :-(
Grazie
Giuliano



Se il tuo array di strutture e' in un unico esemplare, come era in
C, puoi definirlo come membro statico nel seguente modo:
// HEADER FILE
class C {
private:
	static const int sz = 127;
	struct dataa { int a; float b; long c; int d; };
	static dataa sa[sz];
};
// CPP FILE
C::dataa C::sa[sz] = {
	{1, 54.2, 21, 2},
	//...
};
Altrimenti, puoi sempre definirlo come membro statico, e copiarlo
nell'oggetto nel costruttore, nel seguente modo:
#include <algorithm>
using namespace std;
class C {
public:
	C() { copy(s_sa, s_sa + sz, sa); }
private:
	static const int sz = 12;
	struct dataa { int a; float b; long c; int d; };
	static dataa s_sa[sz];
	dataa sa[sz];
};
C::dataa C::s_sa[sz] = {
	{1, 54.2, 21, 2},
	//...
};
Comunque, consiglio di usare il template "vector" della libreria
standard, nel seguente modo:
#include <algorithm>
#include <vector>
class C {
public:
	C(): sa(s_sa, s_sa + sz) {  }
private:
	static const int sz = 12;
	struct dataa { int a; float b; long c; int d; };
	static dataa s_sa[sz];
	std::vector<dataa> sa;
};
C::dataa C::s_sa[sz] = {
	{1, 54.2, 21, 2},
	//...
};
-- 
	Carlo Milanesi
 
http://digilander.libero.it/carlmila


Mi sà che devi inizializzare per forza in questo modo...
almenocchè non siano tutti azzerati o con gli stessi valori
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:20040113011231.38426f8b...@libero.it...
|
| Se il tuo array di strutture e' in un unico esemplare, come era in
| C, puoi definirlo come membro statico nel seguente modo:
|
| // HEADER FILE
| class C {
| private:
| static const int sz = 127;
| struct dataa { int a; float b; long c; int d; };
| static dataa sa[sz];
| };
|
| // CPP FILE
| C::dataa C::sa[sz] = {
| {1, 54.2, 21, 2},
| //...
| };
|
Buona idea grazie
Giuliano