Newsgroup: it.comp.lang.c++
Titolo: aiuto overloading operatori

Quando eseguo questo codice il computer si blocca, però prima mi dà un
avvertimento
che molto probabilmente è la causa dell'errore:
#include <strstrea.h>
#include <stdlib.h>
#include <string.h>
class angle_value {
 int degrees, minutes, seconds;
public:
 angle_value( ) {degrees=0;
 minutes=0; seconds=0;}  // costruttore
 angle_value(char *);
 angle_value operator +(angle_value);
 char * info_display(void);
};
angle_value::angle_value(char *angle_sum)
{
 degrees=atoi(strtok(angle_sum,"d"));
 minutes=atoi(strtok(0,"m"));
 seconds=atoi(strtok(0,"s"));
}
angle_value angle_value::operator +(angle_value angle_sum)
{
angle_value ang;
ang.seconds=(seconds+angle_sum.seconds)%60;
ang.minutes=((seconds+angle_sum.seconds)/60+
              minutes+angle_sum.minutes)%60;
ang.degrees=((seconds+angle_sum.seconds)/60+
              minutes+angle_sum.minutes)/60;
ang.degrees+=degrees+angle_sum.degrees;
cout << ang.degrees  << endl; // output: 48
return ang;
}
char * angle_value::info_display( )
{ 
char *ang[40];
// strstream.h necessario per la formattazione
// errore in questa chiamata
cout << sizeof(ang) << endl;   // output: 160;
ostrstream(*ang,sizeof(ang)) << degrees << "d "
                             << minutes << "m "
                             << seconds << "s"
                             << ends;
// a proposito di questa chiamata avrei un'altra domanda:
// osrtstream prende come parametri * char e int dal  *char *ang[40]* definito
// in questa funzione, quindi l' *ang* restituito da *angle_value::angle_value:: operator+*
// non c'entra assolutamente niente con i parametri di ostrstream?
return *ang;
}
char string1[]="37d 15m 56s";
char string2[]="10d 44m 44s";
main( )
{
angle_value angle1(string1);
angle_value angle2(string2);
angle_value sum_of_angles;
sum_of_angles=angle1+angle2;
cout << "Somma degli angoli: "
     << sum_of_angles.info_display( ) << endl;
return (0);
}
warning C4700: local variable 'ang' used without having be
en initialized
Purtoppo mi sto accorgendo che programmare in C++ è veramente molto
difficile, e
soprattutto altrettanto difficile è fare il debug; ho provato a "seguire"
mentalmente le
operazioni che fa il programma ma quando arriva alla chiamata
ostrstream  mi sono già smarrito da un pezzo.
Ho provato a inizializzare char *ang[40] definedolo:
char angolo[40];
char *ang = angolo;
ma non funziona
'ostrstream::ostrstream' : none of the 3 overloads can convert parameter 1
from type 'char'
???????

 ???????
Penso tu intenda passare ang, NON *ang.
Alex

Purtoppo non sono io che "programmo" male e di basso livello in quanto mi
limito a copiare quello che trovo nel libro "Visual C++ 5.0" di Pappas e
Murray . ( che tra l'altro è del 1997).
Ho conosciuto il C++ circa una settimana fa e la mia esperienza di altri
linguaggi si limita al Pascal (solo DOS), comunque in settimana prossima,
dopo che avrò dato l'esame, prenderò il libro di "Visual C++ 6.0" che
perlomeno sarà più aggiornato.
Infine ringrazio tutti per la pazienza che avete a rispondere anche a
domande di poco interesse come le mie, pian piano che imparerò spero di
proporre quesiti più interessanti (ma mi sa che dovrete sopportati ancora
per diverso tempo) :-(
P.S. effettivamente passando quello che tu mi hai suggerito funziona!
( e quindi quello che c'è scritto nel libro è sbagliato, o perlomeno
antiquato)
Un'ultima cosa: secondo voi questa funzione è valida per calcolare il tempo
di elaborazione o ne conoscete altre migliori?
 clock_t start, finish;
   double  duration;
   start = clock();
   finish = clock();
   duration = (double)(finish - start) / CLOCKS_PER_SEC;

    duration = (double)(finish - start) / CLOCKS_PER_SEC;
Se hai bisogno di elevata precisione puoi usare altri approcci, piu`
dipendenti dalla piattaforma, ma se ti basta l'approssimazione un poco
grossolana che puo` darti la clock() puo` andare bene cosi`.
Alex