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

Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную - C++

Восстановить пароль Регистрация
 
zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
14.07.2012, 22:01     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #1
Есть метод класса внутри которого, посередине, есть проверка. Если условие сходится то метод должен выдать указатель на вектор, а если нет то вывести ошибку(мол проверьте правильность введенных данных). как это сделать можно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2012, 22:01     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную
Посмотрите здесь:

C++ В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
C++ Указатель на метод и на поле класса
Указатель на метод класса! C++
C++ указатель на метод класса(ошибка)
C++ Аргумент функции - указатель на метод класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
14.07.2012, 22:17     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #2
Проще всего возвращать какой-нибудь заведомо невалидный указатель, nullptr как стандартный вариант. Или возвращать всегда bool, а указатель писать в переданную ссылку.
zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
14.07.2012, 22:44  [ТС]     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #3
Цитата Сообщение от NoMasters Посмотреть сообщение
, а указатель писать в переданную ссылку.
ну bool я смогу вернуть, также умею возвращать указатель. а как сделать и то и другое?
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
14.07.2012, 22:48     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #4
C++
1
bool func(void *&ptr);
Возвращать успех/неудачу, указатель класть в ptr
zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
14.07.2012, 22:50  [ТС]     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #5
погодите ptr как аргумент функции?
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
14.07.2012, 22:57     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #6
Да

Не по теме:

достаточно длинное сообщение

zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
14.07.2012, 23:09  [ТС]     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #7
а мне нужно выводить указатель, а не вводить его в функцию
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.07.2012, 23:53     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #8
Цитата Сообщение от zinjvi Посмотреть сообщение
а мне нужно выводить указатель, а не вводить его в функцию
До входа в функцию создаёте указатель на вектор (vector<int> *p), передаёте его в функцию по ссылке (bool func(vector<int> *&ptr);), если результат сравнения в функции успешен, то присваиваете этой ссылке указатель на вектор. Так как указатель был передан по ссылке, то адрес вектора будет у вас в указателе p.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.07.2012, 07:35     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #9
C++
1
2
3
4
5
6
7
int * func()
{
      // середина функции
      // если возвращать не вектор, то
           throw Ololo;
      // продолжение функции
}
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
15.07.2012, 10:23     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #10
Можно попробовать нечто подобное :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void* f(int a)
{
    int a1 = 10;
    bool a2 = true;
    if (a == 0)
        return &a1;
    else
        return &a2;
}
 
void main()
{
    setlocale(0,"RUS");
    int *x = 0;
    bool *b = false;
    x = (int*)f(0), b = (bool*)f(1);
    printf("%d %d\n", *x, int(*b));
}
zinjvi
1 / 1 / 0
Регистрация: 12.05.2012
Сообщений: 26
15.07.2012, 10:36  [ТС]     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #11
Спасибо, буду пробывать .
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.07.2012, 12:23     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #12
Цитата Сообщение от nexen Посмотреть сообщение
Можно попробовать нечто подобное :
nexen, вы используете адреса двух локальных переменных, которые после выхода из f() уже не существуют. Попробуйте сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void* f(int a)
{
    int a1 = 10;
    bool a2 = true;
    if (a == 0)
        return &a1;
    else
        return &a2;
}
 
void main()
{
    setlocale(0,"RUS");
    int *x = 0;
    bool *b = false;
    x = (int*)f(0), b = (bool*)f(1);
    printf("%d %d\n", *x, int(*b));
    printf("\n");
    printf("%d %d\n", *x, int(*b));
}
и посмотрите не результат.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 12:29     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #13
ну там помимо ошибок в рантайме, это еще и самое кривое из того, что можно придумать.
чем вам не нравистя предложенный вариант с возвращением нулевого указателя, вместо bool?
Такое решение самое простое и правильное по идеологии.
Если вернувшийся указатель не нулевой, значит функция успешно отработала и этот указатель можно дальше использовать. Если же вернулся нулевой указатель, то функция отработала неверно.
Есть одна деталь для такого подхода: если логика работы функции такова, что при успешном ее отрабатывании она должна вернуть нулевой указатель, то этот подход работать не будет. В этом случае лучше воспользоваться тем, что тоже уже предлагали:

C++
1
2
3
4
5
6
7
8
9
bool Func(int*& ptr)
{
   если все хорошо
     ptr = some_ptr;
     return true;
 
    иначе
      return false;   
}
Все остальные попытки объеденить два типа в один за счет юнионов, специальных кастов или каких-нибудь Variant-типов выглядят хаками и переусложнением на ровном месте.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2012, 13:48     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную
Еще ссылки по теме:

C++ Указатель на метод класса
C++ Как получить значение из метода класса, если метод возвращает указатель?
C++ Как передать в метод класса Menu указатель на метод дочернего класса?

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

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.07.2012, 13:48     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную #14
zinjvi, разделить метод на два, в первом проверка, во втором выполнение действий и тогда никаких хаков не потребуется, но все таки лучше вариант с киданием исключения в случае невалидных данных.
Yandex
Объявления
15.07.2012, 13:48     Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную
Ответ Создать тему
Опции темы

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