Precedente :: Successivo |
Autore |
Messaggio |
Ce Comune mortale
Registrato: 29/12/06 20:41 Messaggi: 2
|
Inviato: 03 Gen 2007 01:36 Oggetto: Problema con il costrutto switch (c++) |
|
|
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 |
|
|
horus Macchinista
Registrato: 22/03/05 09:48 Messaggi: 2554 Residenza: Sirio e dintorni
|
Inviato: 03 Gen 2007 11:08 Oggetto: |
|
|
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 ). 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 |
|
|
Ce Comune mortale
Registrato: 29/12/06 20:41 Messaggi: 2
|
Inviato: 04 Gen 2007 10:23 Oggetto: |
|
|
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 |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 24 Mag 2007 22:47 Oggetto: |
|
|
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 |
|
|
|