Newsgroup: it.comp.lang.c++
Titolo: Puntatori a strutture

Ciao
Premetto che e' da due giorni che ho iniziato a programmare in c++ con
Borland.
Vorrei sapere dove sbaglio!
Grazie
Codice;
struct Animali
   {
    String Nome;
    String Classe;
    int Size;
    };
struct Animali *MyAnimali[4];
//--------------------------------------------------------------------------
-
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  MyAnimali= new  (struct Animals);        //errore secondo me!
  MyAnimali[0]->Nome= "Pluto";
  MyAnimali[0]->Classe="Cane";
  MyAnimali[0]->Size = 70;
  MyAnimali[1]->Nome= "Carlo";
  MyAnimali[1]->Classe = "Gatto";
  MyAnimali[1]->Size = 30;
  MyAnimali[2]->Nome = "Twiggy";
  MyAnimali[2]->Classe = "Canarino";
  MyAnimali[2]->Size = 7;
  MyAnimali[3]->Nome= "Ragno";
  MyAnimali[3]->Classe = "spider";
  MyAnimali[3]->Size = 10;
  for(int i=0;i<4;i++)
  {
  cmb_AnimalName->Items->Add(MyAnimali[i]->Nome);
  }
  delete MyAnimali;
}

   MyAnimali= new  (struct Animals);        //errore secondo me!
secondo te e secondo me ... cmq non vedo nel codice che hai postato la
struttura animals quindi non so manco come correggerlo ...
mancano troppe parti per capire cosa stai facendo ...
ciao

 ha scritto nel messaggio
news:bggspf$m1f$1...@news.ngi.it...


 __fastcall ???
In generale "fastcall" serve a chiedere, quando possibile, di passare gli
"arguments" alle funzione utilizzando i registri invece che lo stack.
Tommy

   }
quando cancelli :
for (int i=0;i<4;i++) delete MyAnimali[i];
delete MyAnimali; (qua' sono incerto essendo un array di puntatori si
dovrebbe cancellare cosi' o con delete MyAnimali[]; ??? la forma con le []
mi ricordo che si usa se dichiariamo new Animali[n]; non per i puntatori ...
qua' mi hai mandato in pallone pure a me ...)
prendi con le pinze quello che dico che sono anch'io agli inizi ...
ciao

 ha scritto nel messaggio
news:bgh717$hv2$1...@hercules.btinternet.com...

solo sul compilatore borland ??? sul gcc non la ho ancora vista una chiamata
del genere ...
ciao

 solo sul compilatore borland ???
Di sicuro anche su VC++, poi penso anche su altri ma non ho certezze.
Tommy

 qua' mi hai mandato in pallone pure a me ...)
Anche i puntatori sono variabili!! Va usato:
delete [] MyAnimali
Ovviamente dopo il ciclo per deallocare i singoli elementi.
Ciao

 Anche questo č Ok.
come mai si usa dichiarare variabili riprendendo la parola riservata struct
??? e' questo che mi manda a palla ...
ciao

 ??? e' questo che mi manda a palla ...
Era la dichiarazione tipica usata nel C98:
struct S {...};
struct S sObj;
Se non erro con il nuovo standard (C99) è stata introdotta la notazione del
C++, ma per compatibilità è rimasta anche quella vecchia: in pratica non è
un errore usarla, è soltanto uno stile "arcaico" ;-)
Ciao

 un errore usarla, è soltanto uno stile "arcaico" ;-)
solo che mi ricordavo che con il vecchio BC3 dos che usavo molti anni fa non
richiamavo cosi' le strutture ma sempre con solo il nome ... ed e' per
questo che mi sono confuso.
ciao e grazie delle spiegazioni ...

 ... no ???
 C    1989  ANSI/X3.159-1989, ISO/IEC 9899:1990
 C++  1998  ISO/IEC 14882:1998
 C99  1999  ISO/IEC 9899:1999

 questo che mi sono confuso.
È probabile che fosse un'estensione del compilatore.
Ciao