2011-12-07 13 views
5

Aquí está mi código:"control llega al final de la función no nula" de advertencia en Eclipse C++ pero no hay errores de compilación o en tiempo de ejecución

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]; 
    } 
} 

La idea es iterar sobre una matriz de objetos compositor y vuelta una referencia al objeto cuyo campo last_name coincide con "in_last_name". Entiendo lo que me dice la advertencia, es decir, que es posible que la función no devuelva nada (si, por ejemplo, el usuario proporciona un apellido inválido). Mi pregunta es, ¿cómo puedo evitar esto? Intenté agregar "return 0" y "return NULL" después del bucle for y no compilaría. ¿Debería este método arrojar una excepción si no encuentra nada?

+1

Debe lanzar una excepción. –

+1

Las advertencias son realmente errores lógicos en su código. Repare todas las advertencias (y suba el nivel de advertencia a lo más alto posible (razonablemente)) –

+0

Todavía recibo la misma advertencia incluso con un bloque try/catch arrojando una excepción estándar. – wbr

Respuesta

6

Se declara que su función devuelve Composer&, es decir, una referencia a Composer. Si su función no puede devolver una referencia adecuada, y la persona que llama intenta usar el valor de retorno para algo, resultará en un comportamiento indefinido.

Si su función puede legítimamente no encontrar lo que está buscando, es posible que desee cambiar el tipo de retorno a un punterolugar de una referencia. Eso le daría la opción de volver 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; 
} 

Como alternativa, puede lanzar una excepción cuando su función no puede encontrar el objetivo.

+0

Cuando hago eso, recibo el siguiente mensaje de error: "inicialización no válida de la referencia no constante del tipo 'Composer &' de un valor de r 'de' int '" – wbr

+0

¿En qué línea de origen obtiene ese error? –

+0

En la misma línea que la declaración NULL de retorno. – wbr

Cuestiones relacionadas