2011-12-07 5 views
5

Ecco il mio codice:"controllo raggiunge fine del non-vuoto funzione" avvertimento in Eclipse C++, ma nessun errore di compilazione o di run-time

Composer& Database::GetComposer (string in_last_name) 
{ 
    for (int i = 0; i < next_slot_; i++) 
    { 
     if (composers_[i].last_name() == in_last_name) 
      return composers_[i]; 
    } 
} 

L'idea è quella di iterare su un array di oggetti compositore e ritorno un riferimento all'oggetto il cui campo last_name corrisponde a "in_last_name." Capisco cosa mi dice l'avviso, ovvero che è possibile che la funzione non restituisca nulla (se, ad esempio, l'utente fornisce un cognome non valido). La mia domanda è, come posso evitare questo? Ho provato ad aggiungere "return 0" e "return NULL" dopo il ciclo for e non si compilerebbe. Questo metodo dovrebbe generare un'eccezione se non trova nulla?

+1

È necessario generare un'eccezione. –

+1

Gli avvisi sono errori logici nel codice. Correggere tutti gli avvisi (e alzare il livello di avviso fino a (ragionevolmente) possibile) –

+0

Ricevo ancora lo stesso avviso anche con un blocco try/catch che genera un'eccezione standard. – wbr

risposta

6

La funzione viene dichiarata per restituire un Composer&, ovvero un riferimento a un Composer. Se la funzione non restituisce un riferimento adatto e il chiamante tenta di utilizzare il valore restituito per qualcosa, ne risulterà un comportamento non definito.

Se la funzione potrebbe legittimamente non riescono a trovare ciò che sta cercando, è possibile modificare il tipo di ritorno a un puntatoreinvece di un di riferimento. Ciò darà la possibilità di restituire NULL:

Composer* Database::GetComposer (string in_last_name) 
{ 
    for (int i = 0; i < next_slot_; i++) 
    { 
     if (composers_[i].last_name() == in_last_name) 
      return &composers_[i]; 
    } 
    return NULL; 
} 

In alternativa, si potrebbe generare un'eccezione quando la funzione non riesce a trovare il bersaglio.

+0

Quando lo faccio, viene visualizzato il seguente messaggio di errore: "inizializzazione non valida del riferimento non const di tipo" Composer & "da un valore di rvalore di tipo" int "" – wbr

+0

Su quale riga di origine viene visualizzato l'errore? –

+0

Sulla stessa riga dell'istruzione return NULL. – wbr

Problemi correlati