2013-08-05 3 views
0

я в настоящее время изучение исключений обработки, а вот часть моего кода:Compiler ошибка при метании исключение

//vector.cpp 

#include "vector.h" 

Vector::Vector(int s) 
{ 
    if (s < 0) throw length_error{}; 
    elem = new double[s]; 
    sz = s; 
} 

вот код, который я пытаюсь проверить исключение по:

try{ 
    Vector v(-27); 
} 
catch (length_error) 
{ 
    cout << "There was a negative size for your vector.\n"; 
} 
catch (bad_alloc) 
{ 
    cout << "The memory was not allocated properly.\n"; 
} 

Когда я пытаюсь запустить мое приложение, я получаю следующее сообщение об ошибке:

error C2440: '<function-style-cast>' : cannot convert from 'initializer-list' to 'std::length_error' 

Где ошибка?

EDIT: Код был скопирован с C++ Programming Language Book.

ответ

6

Согласно cppreference.com std::length_error имеет два конструктора:

explicit length_error(const std::string& what_arg); 
explicit length_error(const char* what_arg); 

И вы пытаетесь построить с пустым списком параметров. Вам нужно передать строку в конструктор.

+0

см. Мое редактирование! почему автор может написать это так, и я не могу? :)) – Victor

+0

Я бы сказал, что ваш компилятор неверно доказывает автору, если действительно ваш код является * точной * копией из этой книги. Или, автор знает C++ лучше, чем ваш компилятор. – stakx

+0

Вы посмотрели, кто автор моей книги? – Victor

Смежные вопросы