Newsgroup: it.comp.lang.c++
Titolo: stringhe (risolto un problema, se ne presenta un altro..)

allora
grazie al consiglio di Max ho utilizzato il costruttore
appropriato delle string, ed ora funziona.
Il problema sorge quando la stringa è inserita in una struttura.
Ecco il codice incriminato:
--------------
#include <string>
#include <iostream.h>
#include <cstdio>
using std::string;
int main() {
 int i;
 struct Report{
 public:
  string Tag(3, ' ');
  string Title(30, ' ');
  string Artist(30, ' ');
  string Album(30, ' ');
  string Year(4, ' ');
  string Comment(30, ' ');
  unsigned char Genre;
 };
 Report Id3;
 FILE* Pointer;
 Pointer = fopen("a.mp3", "r");
 if(Pointer == NULL)
  cout << "Errore apertura file";
 else {
  fseek (Pointer, -128, SEEK_END);
  for(i = 0; i < 3; i++) Id3.Tag[i] = fgetc(Pointer);
  if(!(Id3.Tag[0] == 'T') && (Id3.Tag[1] == 'A') && (Id3.Tag[2] == 'G'))
   cout << "Non trovo il tag";
  else {
   for(i = 0; i < 30; i++) Title[i] = fgetc(Pointer);
   for(i = 0; i < 30; i++) Artist[i] = fgetc(Pointer);
  }
  fclose(Pointer);
 }
 cout << Id3.Title.c_str();
 cout << Id3.Artist.c_str();
 return 0;
}
----------------------
Il VC++6 mi fornisce un elenco di errori che non si verificano se
le stringhe non sono all'interno della struttura:
un error C2059: syntax error : 'constant' per ogni stringa, e poi
errori vari (C2599, C2446, C2040 ed altri) per ogni linea in cui uso
le stringhe.
Qual'è il problema? Aiutatemi, per cortesia: sto impazzendo!
Grazie in anticipo
--
no sign available

 Qual è il problema? Aiutatemi, per cortesia: sto impazzendo!
Il problema è che quella non è la sintassi prevista per l'inizializzazione
di un membro di una struttura.  I membri di una struct/class possono
essere inizializzati esplicitamente soltanto nella 'initialization-list'
del costruttore. Nel tuo caso:
  struct Report{
   public:
    string Tag;
 
    // ...
    Report() : Tag( 30, ' ' ), /* ... */
    {
    }
    // ...
  } ;     
Sei sicuro di non aver saltato qualche capitolo del manuale? :)
Max

 Sei sicuro di non aver saltato qualche capitolo del manuale? :)
Magari avrò letto con disattenzione..
Comunque ora tutto funziona, ma ho un altro favore da chiederti/vi:
Qualcuno mi spiega la sintassi
Report() : Tag(3, ' '), Title(30, ' ')
  {
  }
L'inizializzazione delle stringhe può essere contenuta all'interno
del costruttore?
Grazie mille!!
--
no sign available

 del costruttore?
Per quello che ne so, no, perché allora, se crei un'istanza costante della
tua classe, non lo accetterebbe; se la classe è costante, solo nella sezione
di inizializzazione puoi dare valori ai campi, poi basta. Se ho scritto
giusto ditemelo, perché non ho assolutamente idea di dove l'ho letto. Ciao
--
Paolo Giarrusso
Per rispondere togliere solo "TOGLIMI" dall'indirizzo, non _spam.

 giusto ditemelo, perché non ho assolutamente idea di dove l'ho letto. Ciao
Invece penso che i problemi sorgano con membri costanti, e non con
istanze
costanti .
Ovvero un classe del tipo
class A{
        int i;
        const int i;
public:
        A();
/* resto classe */
con un costruttore
A::A(){
     i=0;
     j=0;
}
se nel main istanzio un :
const A a;
i problemi li da solo per j
assignment of read-only member 'A::j'
se invece avessi definito il costruttore
A::A():j(0){
       i=0;
}
sarebbe andato tutto liscio
ciao dario.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG