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

Как вернуть из функции ошибку и её расшифровку? - C++

Восстановить пароль Регистрация
 
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45
07.08.2013, 19:06     Как вернуть из функции ошибку и её расшифровку? #1
Вот пример функции:
C++
1
2
3
4
5
6
7
8
9
10
11
int test(int i) {
    if (!i) {
        //Добавить к возврату текстовое сообщение об ошибке
        return 0;
    }else if (i < 10) {
        return 1;
    }else if (i>=10) {
        //Добавить к возврату сообщение об ошибке
        return 0;
    }
}
То есть тут 2 варианта ошибки, когда число >=10 и когда =0. Могу как-то я из этой функции вернуть наружу не только true\false но еще и расшифровку ошибки?

Во пример обращения в неё:
C++
1
2
3
4
5
6
7
8
    int var = test(5);
    if (!var) {
        cout << "Wrong request" << endl;
    }else{
        cout << "Request accepted" << endl;
    }
    system("pause");
    return 0;
Как я могу задать текстовое значение ошибки в функции test и вернуть его в переменную в которую применяется функция?

Чтобы например работала такая конструкция:
C++
1
2
3
4
int var = test(11)
if (!var) {
    cout << text_of_error_message;
}
И если в функцию test передается число 11, возвращалась бы ошибка "слишком большое число", а если 0, та же конструкция выводила бы "нельзя ввести 0".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2013, 19:06     Как вернуть из функции ошибку и её расшифровку?
Посмотрите здесь:

Как вернуть значение функции C++
Как вернуть массив из функции? C++
C++ Можно ли вернуть имя функции, вернувшей ошибку? Стандартами winapi
Как вернуть массив из функции? C++
C++ Как вернуть массив из функции?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
07.08.2013, 19:52     Как вернуть из функции ошибку и её расшифровку? #2
Можете вернуть код ошибки, а текстовое описание хранить для каждого кода.
Так же есть вариант с исключениями, но это несколько жестко для локальных ошибок
ching0n
 Аватар для ching0n
3 / 3 / 1
Регистрация: 06.08.2013
Сообщений: 23
07.08.2013, 20:32     Как вернуть из функции ошибку и её расшифровку? #3
Можно попробовать создать структуру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct rez {
    int a;
    string err;
};
 
rez test(int i) {
    rez prim;
    if (!i) {
        //Добавить к возврату текстовое сообщение об ошибке
        prim.a = 0; prim.err = "то-то"; return prim;
    }else if (i < 10) {
        prim.a = 1; return prim;
    }else if (i>=10) {
        //Добавить к возврату сообщение об ошибке
        prim.a = 0; prim.err = "так и так"; return prim;
    }
}
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45
07.08.2013, 21:46  [ТС]     Как вернуть из функции ошибку и её расшифровку? #4
До стуктур еще не дорос, первые дни только изучаю С++.
Чтобы если возвращать код ошибки, то после вызова функции, придется еще добавлять какой-то обработчик ошибок, при большом количестве вызовов в разных местах, всюду придется совать обработчик. Если обработчик поместить в отдельную функцию, то опять же придется иметь по 1 функции с обработчиком на каждую уникальную функцию.
Поразмыслив и поковыряв самоучитель я пришел к выводу что хоть и кривой, но всё же реализацией того что я хочу сделать будет примерно следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int test1(int testnum, string *error) {
    if (!testnum) {
        *error = "Input must'nt be a zero";
    }else if (testnum > 10 ) {
        *error = "Input number is too much";
    }else{
        return 1;
    }
    return 0;
}
 
int main() {
    string error = "default";
    int testnum = 5;
    int var = test1(testnum, &error);
    if (!var) {
        cout << error << endl;
    }else{
        cout << testnum << " was a good choice" << endl;
    }
    system("pause");
    return 0;
}
Таким образом все ошибки описываются сразу же в вызываемой функции и при желании, после вызова функции, в случае возврата false (ну или любого другого вас не устраивающего, на который описана ошибка), можно узнать, а что собственно пошло не так.
Yandex
Объявления
07.08.2013, 21:46     Как вернуть из функции ошибку и её расшифровку?
Ответ Создать тему
Опции темы

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