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

C++

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

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

11.08.2016, 07:45. Просмотров 333. Ответов 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.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2016, 07:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос "std::domain_error" в bool-функции (C++):

Ошибка "неопределенная ссылка" при работе с std::thread - C++
При попытке сделать что-либо с std::thread, выдает ошибку компиляции, &quot;неопределенная ссылка &quot; . К примеру: #include...

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd" - C++
вот код, нужно найти 3 минимальных положительных числа в массиве. При размере массива больше 950 в конце заполнения рандомным способом...

Найти в строке последовательность символов ("abcd") и заменить ее другой ("xyz") - C++
Найти в строке последовательность символов (&quot;abcd&quot;) и заменить ее другой (&quot;xyz&quot;).

"С" стиль именование статической функции - C++
Реально ли создать dll c++ со статической функцией класса и именованием в стиле &quot;С&quot;. extern &quot;C&quot; { namespace MathLib { ...

Функции-члены с "ref-qualifier" - C++
Собственно, компилируя с помощью g++ 4.8.1 следующий код #include &lt;iostream&gt; #include &lt;type_traits&gt; int main() { struct...

Ошибка: invalid conversion from "int" to "SDL_RendererFlip" - C++
Скриншот приложен, Вот страница, откуда я брал этот код Подскажите что делать

4
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
11.08.2016, 11:29 #2
Chainik228, а точно эта функция кидает?
0
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 46
Завершенные тесты: 1
11.08.2016, 11:43  [ТС] #3
Отладчик до return'а нигде не ловил исключения. Именно после возвращения он и выкидывает в SIGABRT.
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
11.08.2016, 13:27 #4
Chainik228, это исключение кидает функция GetJsonData(). Больше ничего нельзя сказать по этому коду. Озвучь хотя бы какая библиотека для разбора JSON используется.
0
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 46
Завершенные тесты: 1
11.08.2016, 14:20  [ТС] #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)
{
    /* ... */
}
И код стал работать как надо.
0
11.08.2016, 14:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2016, 14:20
Привет! Вот еще темы с ответами:

О "нестабильности" или "переполнении" цикла foreach - C++
Здравствуйте, коллеги. Недавно коллега-программист сообщил мне страшную вещь: оказывается, что цикл foreach может переполниться при...

CString buff = "aaa" + "bbb" - C++
Хочется одним оператором конкатенировать несколько подстрок CString buff = &quot;aaa&quot; + &quot;bbb&quot; компилятор выдает error C2110: cannot add two...

Qt Creator. Все "за" и "против" - C++
Доброго времени суток, форумчане! Сегодня задался вопросом использования такой IDE, как Qt Creator. Суть темы заключается в том, что я...

Ординарная Сеть Петри для задачи об "обедающих философах" - C++
Помогите с сетью Петри. дуб в этом Задача об обедающих философах. Пять философов отдыхают в пансионате. Каждый из философов может...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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