Pregunta

   int somefunction(bool a)
    {
      try
      {
        if(a)
        throw Error("msg");
        return 2;
      }
     catch (Error const & error)
     {
       //do i need to return anything here??
       //return -1;
     }
    }
¿Fue útil?

Solución

Debe devolver algo o volver a lanzar la excepción (o lanzar una nueva). Puede volver a lanzar la misma excepción con solo usar la palabra clave

throw

en el bloque catch sin excepciones ni argumentos posteriores.

Otros consejos

Si no devuelve nada allí, ¡la persona que llama quizás haga algo incorrecto después porque el valor de retorno será indefinido y quizás obtenga uno de los códigos de retorno válidos! Prueba esto:

printf("%i\n", somefunction(false));
printf("%i\n", somefunction(true));

Salida:

2
2293512

El compilador también da una advertencia para esto (por ejemplo, " el control llega al final de la función no nula ").

La función devuelve un int, por lo que debe devolver un int. La alternativa es no detectar la excepción en la función y dejar que se propague.

Primero, al atrapar en la línea 9 la excepción que arrojas en la línea 6, estás haciendo mal uso de las excepciones. Básicamente estás haciendo lo que puedes hacer con el flujo normal del programa, con un "si" declaración. Al agregar excepciones lanzadas de esta manera a su base de código, ya no será cierto que las excepciones se usan para situaciones verdaderamente excepcionales. Cuando hay una alternativa simple, prefiera no lanzar excepciones de sus funciones.

Dicho esto, puede salir de una función int de dos maneras:

  • devolviendo un int
  • lanzando una excepción

A menos que vuelva a lanzar la excepción, deberá devolver un int (presumiblemente un valor centinela de error).

Dependiendo de la configuración de su compilador / compilador, no podrá compilar una función que devuelva int que pueda dejarse sin un valor de retorno, es decir, " la ejecución llega al final de la función no nula " ;. Entonces sí, debe devolver un valor, a menos que desee volver a lanzar la excepción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top