Newsgroup: it.comp.lang.c++
Titolo: domanda sulle strutture

Ciao a tutti, ho provato a fare in modo che una delle
funzioni membro di una classe restituisca una struttura.
Ho provato in vari modi e non ci sono riuscito..
A questo punto mi č sorta una domanda: č possibile ritornare
una struttura? E, se sě, come?
Grazie in anticipo! ^_^
--
"Have you run your fingers down the wall
 And have you felt your neck skin crawl
 When you are searching for the light?"
        [Iron Maiden - Fear of the dark]

una struttura? E, se sì, come?
Certo, tieni presente però che se la struttura è grossa non ti
conviene ritornarla.
#include <iostream>
struct struttura{
    int a;
    int b;
};
class C{
public:
    struttura f(){
        struttura ret;
        ret.a = 15;
        ret.b = 42;
        return ret;
    }
};
int main(){
    C c;
    struttura s = c.f();
    std::cout << s.a << " - " << s.b << std::endl;
    return 0;
}
-- 
Marco Barisione (ICQ 84277092)

 conviene ritornarla.
[cut]
Grazie mille per l'aiuto! ^_^
la mia struttura è questa:
struct Report{
  char Tag[3];
  char Titolo[30];
  char Artista[30];
  char Album[30];
  char Anno[4];
  char Commento[30];
  char Genere[1];
 };
 Report Id3_Report;
non è grossa.
Ora ho risolto il problema, ma ho ancora un dubbio. Questo codice
funziona:
 Report LeggiRapporto() {
 return Id3_Report;
 }
Tenendo presente che sono all'interno di una classe, se io prima dichiaro
la funzione
Report LeggiRapporto();
e poi la definisco così: (id3v1 è il nome della classe)
Report id3v1::LeggiRapporto() {
    return Id3_Report;
}
non funziona. Come mai?


non funziona. Come mai?
Cosa vuol dire non funziona?


 Cosa vuol dire non funziona?
Vuol dire che il VC++, non so perché, non lo compila.


Vuol dire che il VC++, non so perché, non lo compila.
Purtroppo la sfera di critallo non la so usare molto bene, quindi
dovresti postare qui gli errori che ti dà il VC++ :-)


 Cosa vuol dire non funziona?
Ti riporto i pezzi di codice "incriminati" e gli errori del
VC++:
(membro private):
struct Report{
  char Tag[3];
  char Titolo[30];
  char Artista[30];
  char Album[30];
  char Anno[4];
  char Commento[30];
  char Genere[1];
 };
 Report Id3_Report;
.
.    codice
.
(funzione pubblica)
Report* LeggiRapporto();
.
. chiusura classe, costruttori, funzioni membro
.
(ecco il codice che da errore):
Report* id3v1::LeggiRapporto() {
  Report* Rapporto = &Id3_Report;
  return Rapporto;
 }
compilandolo escono questi errori:
c:\c++\id3 renamer\id3v1.h(170) : error C2143: syntax error : missing ';'
before '*'
c:\c++\id3 renamer\id3v1.h(170) : error C2501: 'Report' : missing
storage-class or type specifiers
c:\c++\id3 renamer\id3v1.h(170) : error C2501: 'LeggiRapporto' : missing
storage-class or type specifiers
c:\c++\id3 renamer\id3v1.h(170) : error C2556: 'int *__thiscall
id3v1::LeggiRapporto(void)' : overloaded function differs only by return
type from 'struct id3v1::Report *__thiscall id3v1::LeggiRapporto(void)'
        c:\c++\id3 renamer\id3v1.h(50) : see declaration of 'LeggiRapporto'
c:\c++\id3 renamer\id3v1.h(170) : error C2371: 'LeggiRapporto' :
redefinition; different basic types
        c:\c++\id3 renamer\id3v1.h(50) : see declaration of 'LeggiRapporto'
Error executing cl.exe
Cosa ho fatto di tanto grave?
Sono un novellino del c++, lo conosco da poco, e lo studio da autodidatta.


 dovresti postare qui gli errori che ti dà il VC++ :-)
Fatto, speriamo che tu mi possa aiutare!
Ciao, e grazie ancora!


 per il '\0'.
Il C++ non si riserva un bel niente. se tu dichiari
char array[30];
hai un array di trenta caratteri, indicizzati da 0 a 29. L'elemento
"array[30]" e' al di fuori dello spazio riservato per la variabile
"array". Sta a te dichiarare array delle dimensioni che effettivamente
ti servono. Se, come dice Marco, il tuo titolo puo' contenere trenta
caratteri effettivi sta a te riservare spazio anche per lo '\0' finale,
ovvero
char Titolo[31];
Ciao,
Nicola

 char Titolo[31];
Capito.. Vado a studiare le std::string ^_^
grazie per la spiegazione!


 lasciato libero per il '\0'.
prova a contare quanti elementi sono, dallo zero al 29, più il 30 :-)
-- 
 < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
     Don't stand, REACT!      version 0.0.19. C, C++ and ASM developers
                              and beta testers are welcome!