Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 44
#1

"std::domain_error" в bool-функции - C++

11.08.2016, 07:45. Просмотров 287. Ответов 4
Метки нет (Все метки)

Есть одна функция, которая сохраняет данные json в файл. Когда доходит дело до return, то срабатывает исключение "std::domain_error".

C++
1
2
3
4
5
6
7
8
9
10
11
bool Json::Save ( std::string file )
{
    std::ofstream str(file, std::ios::out | std::ios::trunc );
    if (str.is_open())
    {
        str << this->GetJsonData() << std::endl;
        str.close();
        return true;
    }
    else return false;
}
Кликните здесь для просмотра всего текста
terminate called after throwing an instance of 'std::domain_error'
what(): type must be boolean, but is object


Я не могу понять, почему возвращаемое значение является неким объектом, а не булевым значением. В заголовке и в коде возвращаемые типы везде указаны как bool.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2016, 07:45     "std::domain_error" в bool-функции
Посмотрите здесь:

C++ error C2040: key: "int [256]" отличается по уровням косвенного обращения от "std::ofstream"
C++ std::endl; и std::cout"/n"; - одно и то же?
C++ Что такое "bool " и #include <algorithm>? Кто знает , как они работают ?
Что за подсказки появляются после напечатанного в коде "std" C++
C++ Как кинуть исключение std::locale::global(std::locale("");
C++ namespace "std" has no member "vector"
error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::basic_istream<_Elem,_Traits>" C++
IntelliSense: отсутствует оператор "<<", соответствующий этим операндам типы операндов: std::basic_ostream<char, std::char_traits<char> C++
Бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" C++
Error C2664: Client::First: невозможно преобразовать параметр 1 из "std::queue<_Ty>" в "std::queue<_Ty> &" C++
Не существует подходящей функции преобразования из "std::string" в "int" C++
C++ Ошибка "non-static data member initializers only available with -std=c++11 or -std=gnu++11"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
11.08.2016, 11:29     "std::domain_error" в bool-функции #2
Chainik228, а точно эта функция кидает?
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 44
11.08.2016, 11:43  [ТС]     "std::domain_error" в bool-функции #3
Отладчик до return'а нигде не ловил исключения. Именно после возвращения он и выкидывает в SIGABRT.
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
11.08.2016, 13:27     "std::domain_error" в bool-функции #4
Chainik228, это исключение кидает функция GetJsonData(). Больше ничего нельзя сказать по этому коду. Озвучь хотя бы какая библиотека для разбора JSON используется.
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 44
11.08.2016, 14:20  [ТС]     "std::domain_error" в bool-функции #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
https://github.com/nlohmann/json

Теперь я, примерно, понял в каком направление копать.

Добавлено через 22 минуты
Вот сама функция GetJsonData().

C++
1
2
3
4
std::string Json::GetJsonData ()
{
    return this->data.dump(4);
}
Добавлено через 7 минут
Проблема решена.
Оказывается, я неправильно поступил в деструкторе, когда собирался удалять текущие данные.

Я сделал так, думая что это сочтется как проверка на NULL.
C++
1
2
3
4
if (this->data)
{
    /* ... */
}
Соответственно, он жаловался на это условие, так как ожидалось bool, а не данные. Переделал сравнение:
C++
1
2
3
4
if (this->data != NULL)
{
    /* ... */
}
И код стал работать как надо.
Yandex
Объявления
11.08.2016, 14:20     "std::domain_error" в bool-функции
Ответ Создать тему
Опции темы

Текущее время: 17:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru