2014-11-27 5 views
6

Sto riscontrando un piccolo problema con il mio codice. Per qualche ragione, quando provo a lanciare una stringa con il codice qui sotto, ottengo un errore in Visual Studio.Eccezione C++ - lancio di una stringa

#include <string> 
#include <iostream> 
using namespace std; 

int main() 
{ 

    char input; 

    cout << "\n\nWould you like to input? (y/n): "; 
    cin >> input; 
    input = tolower(input); 

    try 
    { 
     if (input != 'y') 
     { 
      throw ("exception ! error"); 
     } 
    } 
    catch (string e) 
    { 
     cout << e << endl; 
    } 
} 

Errore:

error

Link: http://i.imgur.com/pYAXLuU.png

+1

Se si desidera catturare una stringa, lanciare una stringa e non una stringa letterale. Altrimenti prendi un const char *. Anche se sarebbe una buona idea usare una delle classi di eccezioni. –

risposta

10

che si sta gettando un const char* e non un std::string, invece si dovrebbe essere buttare string("error")

edit: l'errore è risolto con

throw string("exception ! error"); 
+0

Sì, ma la sua cattura: throw ("eccezione! Errore"); che è una stringa – Jimmy

+0

@ Jimmy sì, quindi non è trovare un caso per catturare un 'const char *' –

+0

Grazie, questo ha funzionato stringa di lancio – Jimmy

9

Lanciare una stringa è davvero una cattiva idea.

Sentitevi liberi di definire una classe eccezione personalizzata, e hanno una stringa incorporato all'interno (o semplicemente derivare la classe eccezione personalizzata da std::runtime_error, passare un messaggio di errore al costruttore, e utilizzare il metodo what() per ottenere la stringa di errore a il sito di cattura), ma fare non lanciare una stringa!

+2

Sono d'accordo, lanciare tutto ciò che non è relativo a 'std :: exception' è una pessima idea ... – MFH

+0

O anche solo lanciare un' std :: runtime_error ('testo di eccezione') '. – Hurkyl

+1

Perché? Apprezzo il consiglio, ma qual è il ragionamento? – feuGene