Newsgroup: it.comp.lang.c++
Titolo: Qual'è il problema ...

Scusate ma ho un'altro listato che mi dà problemi ..
questo codice che vi incollo contiene 2 problemi , ma non riesco a capire
quali siano..  :-(
#include <iostream.h>
enum days {dom,lun,mar,mer,gio,ven,sat};
class week
{
public:
 week()
 {daytype = dom;}
 void getnextday(int daytype);
protected:
 days daytype;
};
void week::getnextday(int daytype)
{
do {
switch (daytype)
 {
 case dom:
  daytype = lun ;
  break;
 case lun:
  daytype = mar;
  break;
 case mar:
  daytype = mer;
  break;
 case mer:
  daytype = gio;
  break;
 case gio:
  daytype = ven;
  break;
 case ven:
  daytype = sat;
  break;
 default:
  cout << "\n You have insert an invalid name!";
 }
    } while (daytype =! days);
}
main()
{
int day;
cout << "Insert the day (dom,lun,mar,mer,..): ";
cin >> day;
cout << "\nToday is " << day;
cout << "\nTomorrow is " << week.getnextday(day);
return 0;
}

 wrote:
Non capisco esattamente per quale motivo crei una classe il cui unico compito
e` quello di fornire una funzione...
Comunque il problema e nella getnextday, ecco una formulazione che
non dovrebbe darti errori:
void week::getnextday(int daytype) {
  switch (daytype)  {
     case dom:      daytype = lun ;
                                break;
     case lun:         daytype = mar;
                                break;
     case mar:       daytype = mer;
                                break;
     case mer:       daytype = gio;
                                break;
     case gio:         daytype = ven;
                                break;
     case ven:        daytype = sat;
                                break;
     default:
  cout << "\n You have insert an invalid name!";
}
Ho notato che non hai messo una case relativa a sab, non so se per
dimenticanza o altro.
Comunque c'era un errore piuttosto grave: la switch era dentro un do-while
la cui guardia tentava un confronto tra una variabile ed un tipo.
Ci sarebbero poi altri aspetti di cui parlare, ma e` un'altro discorso... se sei
interessato posta un follow up.
Saluti,
Paolo
----------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
  e-mail: 
mar...@cli.di.unipi.it
 
----------------------------------------------------------

    } while (daytype =! days);
Ah, gia`, anche questo: days e` il nome di un tipo, non
ha senso confrontarlo con la variabile daytype.
Alex

ha senso confrontarlo con la variabile daytype.
..non posso confrontare la variabile  enumeratore con una variabile normale?

 cout << "\nTomorrow is " << week.getnextday(day);
cout << "\nTomorrow will be " << week.getnextday(day);
Inoltre getnextday() restituisce void e quindi non puoi utilizzarla in
quel modo. Ma per di più l'hai invocato attraverso il nome della classe
invece che il nome di una variabile di quel tipo come in
week wk;
wk.getnextday(day);
Credo che tu (come tutti noi d'altronde) debba studiare ancora un bel
po'... :-)
EMG

void getnextday(int daytype): daytype(daytype) {}
Le liste di inizializzazione si possono apporre solo ai costruttori
(infatti si chiamano anche "ctor initializer list").
Il modo piu` comune per dirimere un'ambiguita` del genere e`,
nel corpo della funzione membro, usare this->daytype per fare
riferimento al daytype che e` variabile d'istanza della classe; ma
ancora piu` semplice, naturalmente, e` evitare di usare i nomi
in modo cosi` confuso.
Alex

..non posso confrontare la variabile  enumeratore con una variabile
normale?
Non puoi confrontare nulla con un *tipo*, e days in
questo contesto e` un tipo, non una variabile (ne`
normale, ne` altro).
Alex

 ..non posso confrontare la variabile  enumeratore con una variabile normale?
Cosa intendi per variabile normale?
In questo caso daytype e' una variabile di tipo int, mentre
days non e' una variabile, ma e' il nome di un tipo, non
ha un valore e non puo' essere confrontato.
	Mauro

 (infatti si chiamano anche "ctor initializer list").
Oopss! Errore! Scusate.
EMG