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

С++ для начинающих

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

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

07.08.2013, 19:06. Просмотров 1375. Ответов 3
Метки нет (Все метки)

Вот пример функции:
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".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2013, 19:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вернуть из функции ошибку и её расшифровку? (C++):

Можно ли вернуть имя функции, вернувшей ошибку? Стандартами winapi - C++
например FormatMessage может вернуть описание ошибки, а может ли она или какая ни будь другая функция вернуть имя функции которая вызвала...

Как вернуть вектор из функции? - C++
Как вернуть вектор strx из функции crypto чтоб значения передались pthread_join(thread1,(void**)&amp;str1); ...

Как вернуть массив из функции? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int mass(int n) { int* Mass = new int; //здесь...

Как вернуть string из функции? - C++
Вот вам умные дяди скрин ковырялся я ковырялся так и не понял в чем касяк мб функцию надо по другому записывать или я даже не знаю делал...

Функции, как вернуть значение? - C++
Нужно вернуть значение sum и min и вывести их main.cpp Но компилятор пишет, что: &quot;Ошибка : использована неинициализированная локальная...

Как вернуть значение функции - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; struct list{ float data; list *next; }; void my(list *p) {

3
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
07.08.2013, 19:52 #2
Можете вернуть код ошибки, а текстовое описание хранить для каждого кода.
Так же есть вариант с исключениями, но это несколько жестко для локальных ошибок
0
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;
    }
}
0
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 (ну или любого другого вас не устраивающего, на который описана ошибка), можно узнать, а что собственно пошло не так.
0
07.08.2013, 21:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2013, 21:46
Привет! Вот еще темы с ответами:

Как вернуть значение функции в С++ - C++
Помогите с задачей

Как вернуть массив из функции? - C++
int SumElementovStolbca(int M, int mas, int N) { int sum = 0; for (int i = 0; i&lt;N; i++) { for (int j = 0; j&lt;N; j++) {...

Как вернуть массив из функции? - C++
у меня есть две функции: Одна должна возвращать три числа, а вторая двумерный массив 10Х10; Как это провернуть?

Как вернуть массив из функции? - C++
Please! #include &lt;iostream&gt; using namespace std; int _plus1 (int array ) { for (int i = 0; i &lt; 5; i++){ array...


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

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

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