2014-11-27 2 views
6

У меня небольшая проблема с моим кодом. По какой-то причине, когда я пытаюсь передать строку с кодом ниже, я получаю ошибку в визуальной студии.C++ Exception - Throw a String

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

Ошибка:

error

Ссылка: http://i.imgur.com/pYAXLuU.png

+1

Если вы хотите поймать строку, введите строку, а не строковый литерал. В противном случае поймайте const char *. Хотя было бы лучше использовать один из классов исключений. –

ответ

10

вы в настоящее время бросает const char* и не std::string, вместо этого вы должны бросать string("error")

редактировать: ошибка разрешается с помощью

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

Да, но его ловить: throw («исключение! Ошибка»); который является строкой – Jimmy

+0

@ Jimmy да, поэтому он не находит случай для catch 'const char *' –

+0

Спасибо, это сработало – Jimmy

9

Бросок струны - это действительно плохая идея.

Вы можете определить пользовательский класс исключений, и есть строка внедренный внутрь (или просто получить свой собственный класс исключения из std::runtime_error, передать сообщение об ошибке в конструкторе, и использовать метод what(), чтобы получить строку ошибки в место для ловли), но делать не выбросить нитку!

+2

Я согласен, бросая что-нибудь, не связанное с 'std :: exception', это действительно плохая идея ... – MFH

+0

Или даже просто выбросьте' std :: runtime_error ('exception text') '. – Hurkyl

+1

Почему? Я ценю совет, но что такое рассуждение? – feuGene