Newsgroup: it.comp.lang.c++
Titolo: non capisco

Ho definito una classe in questo modo:
#ifndef PAZIENTI_H
#define PAZIENTI_H
#include "prestazioni.h"
#include "data.h"
class Paziente{
       char nome[30];
    char cognome[30];
    char cod_fisc[16];
    char prestazione[70];
    Data data_prest;
    Data data_nascita;
    int l;
  public:
  //suppongo un max di 5 prestazioni
  void insert();
  void visualizza();
  bool cerca(char []);
  void ins_prest(char[64]);
  };
#endif
E la sua interfaccia in questo
#include "pazienti.h"
#include <iostream.h>
#include <string.h>
#include"prestazioni.h"
void Paziente::insert() {
    cout << "Inserisci nome: " ; cin>>nome;
 cout << endl;
 cout << "Inserisci cognome: " ; cin>>cognome;
 cout << endl;
 cout << "Inserisci data di nascita:"<< endl;
 data_nascita.leggi_data();
 cout << "Inserisci codice fiscale: " ;
 cin>>cod_fisc;
 cout << endl;
 cout << "Inserisci data: ";
 data_prest.leggi_data();
    cout << "Inserisci prestazione: ";
}
void Paziente::visualizza(){
     cout << " Nome :" << nome << endl<<endl;
  cout << " Cognome: " << cognome << endl<<endl;
  cout << " Codice Fiscale: " << cod_fisc << endl<< endl;
  cout << " Data di nascita:" ; data_nascita.stampa_data();
  cout<< endl<<endl;
  cout << " Prestazioni richiesta: " ;
  for(int i=0;i<l;i++)cout << prestazione[i];                        // QUI
L HA UN VALORE NEGATIVO ENORME:QUESTA CHIAMATA DOVREBBE
  cout << endl;
// AVVENIRE DOPO IL SETTAGGIO DI L NELL'ULTIMA FUNZIONE AD OPERA DI STRLEN()
cout << "Prevista per il giorno: ";
data_prest.stampa_data();
cout <<endl<<endl;
}
bool Paziente::cerca(char cdfpaz[16]){
 if(!memcmp(cdfpaz,cod_fisc,16)){
  cout << "Il Paziente è già presente nel database" << endl;
     cout << " Ora fornisco i suoi dati principali " << endl;
        visualizza();
 return true;
 }
 else cout << " Il Paziente non è presente si desidera inserire il paziente
nel database?( s/n)" << endl;
    return false;
}
void Paziente::ins_prest(char prest[70] ){
  l=strlen(prest);
//QUI L è UN VALORE ESATTO MA QUANDO LO SPEDISCO SOPRA A VISUALIZZA......
  strncpy(prestazione,prest,l);
  for(int i=0;i<l;i++)cout << prestazione[i];
}
Ora il mio problema è questo :
Quando chiamo la funzione void Paziente::ins_prest(char prest[70] ) questa
copia nel mio array prestazioni un tot di caratteri dipendenti dalla
lunghezza effettiva della stringa e dovrebbe memorizzarlo nel membro privato
di Paziente ora inizialmente le cose vanno bene infatti l'istruzione
for(int i=0;i<l;i++)cout << prestazione[i]; presente nell'ultima riga
funziona ma se invece voglio stampare chiamando la funzione visualizza() mi
stampa tutto bene fino a prestazione dove o non mi stampa nulla o una serie
caratteri inutili.
Suppongo che in questo passaggio l'array prestazioni venga perso ma non
riesco a capire perchè!
Gentilmente a chi avesse un po di pazienza rivolgo questo aiuto nel
spiegarmi dove ho sbagliato e come mai l'array viene perso.
Ringrazio anticipatamente chiunque cerchi di darmi una mano
ciao ciao a tutti e grazie
Alex

 void Paziente::ins_prest(char prest[70] ){
Ti rispondo con una domanda:
Sei sicuro di cosa stai passando alla funzione membro ins_prest ?
Comunque questo errore, IMHO, è figlio del fatto di usare un misto
di C e C++.
Invece di usare array di caratteri sarebbe meglio usare le std::string
e questi problemi non si porrebbero neppure.
--
Gerolamo


--------------------------------
Inviato via 
http://usenet.libero.it