Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Problema con il costrutto switch (c++)
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
Ce
Comune mortale
Comune mortale


Registrato: 29/12/06 20:41
Messaggi: 2

MessaggioInviato: 03 Gen 2007 01:36    Oggetto: Problema con il costrutto switch (c++) Rispondi citando

Ciao a tutti,
stanotte nel tentativo di programmare qualcosina per l'esame sono incappato in un errore che non riesco a spiegare.
Riporto per comodità la porzione di codice, sperando che l'errore non sia nella parte che sottointendo:
Codice:

int scelta;
...
cin>> scelta;
...
switch (scelta) {
          case 1:
          float q;
          int p=0;
...


In pratica non riesco ad inizializzare p nella dichiarazione e come errore mi dà:

"jump to case label"
"crosses initialization of `int p'"
Oltretutto non mi dà alcun errore se inizializzo p in un momento successivo alla dichiarazione.

Probabilmente si tratta di un errore banale, ma non è il primo programma in cui mi capita una cosa del genere.
Cosa c'è che non va?
Top
Profilo Invia messaggio privato
horus
Macchinista
Macchinista


Registrato: 22/03/05 09:48
Messaggi: 2554
Residenza: Sirio e dintorni

MessaggioInviato: 03 Gen 2007 11:08    Oggetto: Rispondi citando

Bisognerebbe vedere tutto lo switch comunque dovrebbe essere un problema di scope della variabile, credo che tu abbia almeno un altro case e se ci finisci dentro (ad esempio per scelta==2) la variabile p non è inizializzata (che poi è la traduzione del messaggio tuo di errore Wink). Un modo per risolvere potebbe essere limitare lo scope di p con delle parentesi tipo:
Codice:
switch (scelta) {
case 1:
float q;
{
int p=0;
// ci fai quello che vuoi
}
// continui
case 2:
// eccetera


Fammi sapere se risolvi.
Top
Profilo Invia messaggio privato
Ce
Comune mortale
Comune mortale


Registrato: 29/12/06 20:41
Messaggi: 2

MessaggioInviato: 04 Gen 2007 10:23    Oggetto: Rispondi citando

Sì così risolvo, anche se non ho capito perchè si genera l'errore...

cioè, a cosa mi serve limitare lo scope se tanto non uso un'altra variabile 'p' negli altri case e soprattutto perchè se la inizializzo nella dichiarazione mi dà errore e se invece la inizializzo a parte

int p;
p=0;

non mi dà nessun errore? mi sembra fondamentalmente la stessa cosa.
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 24 Mag 2007 22:47    Oggetto: Rispondi

Che compilatori stai usando?
Il seguente programma funziona con g++ 4.1.2 (linux) senza problemi:

Codice:
#include <iostream>

using namespace std;
int main()
{
   int scelta;
   cin >> scelta;
   switch(scelta)
   {
      case 1:
         float q;
         int p=0;
   }
}


Una volta ho sclerato perchè avevo a che fare con una vecchia versione di ANSI C che pretendeva di avere le var dichiarate prima di ogni altra riga all'interno della funzione e addirittura era stronzo anche sull'ordine dei tipi dichiarati ossia magari se prima dichiaravo un char e poi un int --> tutto ok mentre se prima dichiaravo l'int allora erano cazzi!
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi