
air (Normal User)
Newbie
    
Messaggi: 14
Iscritto: 23/04/2011
|
Ciao a tutti ho questo problema... Il programma mi restituisce un errore di tipo
System.StackOverflowException
Vorrei cattuare questo errore con i catch, ma non ci riesco. Ho usato il seguente codice:
Codice sorgente - presumibilmente VB.NET |
Function Fdix(ByVal x As Single) Dim sommatoria As Single Dim cont As Integer For cont = 0 To grado sommatoria = sommatoria + (vet(cont, 0) * (x ^ (vet(cont, 1)))) Next acu += 1 Try Fdix = sommatoria Catch ex As System.StackOverflowException MsgBox(ex.Message) End Try End Function
|
Forse perchè lo uso dentro una funzione???
Ultima modifica effettuata da air il 23/04/2011 alle 20:08 |
|

Riki94 (Normal User)
Pro
    
Messaggi: 93
Iscritto: 30/07/2009
|
Il try catch funziona benissimo nelle funzioni.
Non so cosa faccia il programma e nello specifico la funzione, ma mi lascia un po perplesso..
tu dichiari una funzione fdix che ha come argomento un valore single... e fin qui ok.
Quindi esegui i tuoi calcoli vari.. e anche qui ok.
Infine, nel try catch, assegni a fdix che non hai dichiarato prima nella funzione il valore di sommatoria.
Ed è questo che mi lascia perplesso: se fdix non è una variabile che hai dichiarato prima significa che la intendi come funzione... Ma non puoi assegnare ad una funzione il valore di una variabile
se vuoi ritornare un valore devi scrivere:
Codice sorgente - presumibilmente C# / VB.NET |
che qui sarebbe:
Codice sorgente - presumibilmente C# / VB.NET |
Chiedo scusa se ho interpretato male... |
|

air (Normal User)
Newbie
    
Messaggi: 14
Iscritto: 23/04/2011
|
No, puoi anche scrivere in quel modo! ha sempre funzionato, ho provato anche come dici infatti non cambia nulla. Nella variabile ex del mio catch specifico il tipo as che mi restituisce l'errore ma come se non lo prendesse..non capisco cos'è che non va!
|
|

TheKaneB (Member)
Guru^2
    
Messaggi: 1792
Iscritto: 26/06/2009
|
l'eccezione è generata dal ciclo for, che è fuori dal TRY, ecco perchè il catch non becca l'eccezione.
Metti anche il FOR dentro il blocco Try, e vedrai che ti prende tranquillamente l'eccezione generata.
|
|

air (Normal User)
Newbie
    
Messaggi: 14
Iscritto: 23/04/2011
|
Questa è l'eccezzione che mi da:
" An unhandled exception of type 'System.StackOverflowException' occurred in IlRisolutore.exe"
ho provato come dici, cioè a mettere il for dentro il try ma mi da l'errore che riportato sopra!
Codice sorgente - presumibilmente VB.NET |
Function Fdix(ByVal x As Single) Dim sommatoria As Double Dim cont As Integer Try For cont = 0 To grado sommatoria = sommatoria + (vet(cont, 0) * (x ^ (vet(cont, 1)))) Next Fdix = sommatoria Catch ex As StackOverflowException MsgBox(ex.Message) End Try End Function
|
l'errore me lo da su "Fdix = sommatoria" xkèèè?
|
|

Riki94 (Normal User)
Pro
    
Messaggi: 93
Iscritto: 30/07/2009
|
te l'ho detto.... non puoi assegnare ad una funzione il valore della variabile... oltretutto la funzione non la passi neanche con gli argomenti...
PS: magari mi sbaglio io e sono fissato su quella cosa... ma mi sembra l'unica cosa possibile...
|
|

air (Normal User)
Newbie
    
Messaggi: 14
Iscritto: 23/04/2011
|
ho provato nuovamente come dici apportando le modifiche di entrambi ma non funziona!Faccio così anke xkè su uno dei miei libri di testo ritorna così le funzioni quindi non credo sia così ..e cmq ho anke provato come dici ma nnt da fare!
Non riesco a risolvere! uff
|
|

Phil93 (Normal User)
Pro
    
Messaggi: 85
Iscritto: 26/01/2011
|
In VB.NET, come nelle altre versioni di Visual Basic, è possibile impostare il valore di ritorno di una funzione assegnando un valore al nome della stessa, dal momento che esso viene visto come variabile locale della stessa funzione. E' preferibile usare "Return" quando la funzione ha più punti d'uscita possibili, ma i due modi di operare sono identici.
|
|

Ultimo (Member)
Guru
    
Messaggi: 931
Iscritto: 22/05/2010
|
Codice sorgente - presumibilmente VB.NET |
1. Function Fdix(ByVal x As Single) As Double 2. Dim sommatoria As Double 3. Dim cont As Integer 4. Try 5. For cont = 0 To grado 6. sommatoria = sommatoria + (vet(cont, 0) * (x ^ (vet(cont, 1)))) 7. Next 8. Fdix = sommatoria 9. Catch ex As StackOverflowException 10. MsgBox(ex.Message) 11. End Try 12. Return Fdix End Function
|
Prova così dovrebbe andare
If ok Then GOTO Avanza else GOTO Inizia
|
|