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

Передача параметра в функцию - C++

Восстановить пароль Регистрация
 
[WRG]
 Аватар для [WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
15.01.2014, 23:36     Передача параметра в функцию #1
Проблема заключается в следующем.
Есть функция, вот её прототип.
C++
1
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
есть так же класс
C++
1
2
3
4
5
6
class Foo
{
    ..
    void ololo();
    ..
}
в его конструкторе я пытаюсь вызвать функцию attachInterrupt следующим образом
C++
1
attachInterrupt(0, this->ololo, FALLING);
на что получаю ответ
C++
1
error: cannot convert ‘Foo::ololo’ from type ‘void* (Foo::)()’ to type ‘void (*)()
Понимаю, что вся проблема скорее всего в том, что надо правильно преобразовать типы, но не могу допереть как именно. Если вызывать attachInterrupt не из класса и не для члена класса, то всё работает. Подскажите пожалуйста, как правильно вызвать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.01.2014, 00:20     Передача параметра в функцию #2
Указатель на метод - это не указатель на функцию.
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
16.01.2014, 00:23     Передача параметра в функцию #3
сделай метод статик
при компиляции программы неизвестен адрес метода
вдруг ни одного объекта не будет
а статик гарантировано ляжет в память
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.01.2014, 00:24     Передача параметра в функцию #4
C++
1
2
void attachInterrupt(char interruptNum, void (Foo::*userFunc)(void), int mode);
attachInterrupt(0, &Foo::ololo, FALLING);
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
16.01.2014, 00:26     Передача параметра в функцию #5
Цитата Сообщение от alsav22 Посмотреть сообщение
&Foo::ololo
мдя про это я и забыл давненько указателями на методы не пользовался
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.01.2014, 00:39     Передача параметра в функцию #6
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
void attachInterrupt(char interruptNum, void (Foo::*userFunc)(void), int mode);
attachInterrupt(0, &Foo::ololo, FALLING);
Но использовать указатель на метод, без привязки к объекту, не получится. Поэтому:
C++
1
2
3
4
5
6
7
8
void attachInterrupt(char interruptNum, Foo* obj, void (Foo::*userFunc)(void), int mode)
{
    (obj ->*userFunc)();
}
Foo()
{
    attachInterrupt(0, this, &Foo::ololo, FALLING);
}
[WRG]
 Аватар для [WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
16.01.2014, 00:44  [ТС]     Передача параметра в функцию #7
дело в том, что attachInterrupt библиотечная функция, не факт, что я буду использовать её только в этом куске кода, поэтому переделать её будет неправильно. сделал метод static, но теперь из него не могу обратиться к другим членам класса Foo через this.
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
16.01.2014, 00:57     Передача параметра в функцию #8
Цитата Сообщение от [WRG] Посмотреть сообщение
но теперь из него не могу обратиться к другим членам класса Foo через this.
потому что она одна на все объекты
и не знает к кому обращаться, придется передавать указатель на объект
посмотри как устроены потоковые функции и функции обратного вызова когда они методы класса

Добавлено через 57 секунд
в общем это показал alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
attachInterrupt(0, this, &Foo::ololo, FALLING);
[WRG]
 Аватар для [WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
16.01.2014, 11:07  [ТС]     Передача параметра в функцию #9
Кажется понял, в чем моя ошибка. Получается, можно переопределить attachInterrupt, а можно написать обёртку, но это костыль.
[WRG]
 Аватар для [WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
20.01.2014, 20:23  [ТС]     Передача параметра в функцию #10
пока сделал так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Foo
{
    ..
    void ololo();
    ..
}
 
void leftOptoInterrupt()
{
    foo.ololo();
}
 
int main()
{
    Foo foo;
    attachInterrupt(0, leftOptoInterrupt, FALLING);
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 20:36     Передача параметра в функцию #11
Цитата Сообщение от [WRG] Посмотреть сообщение
пока сделал так
C++
1
2
3
4
void leftOptoInterrupt()
{
    foo.ololo();
}
А foo откуда? Глобальный объект?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2014, 20:58     Передача параметра в функцию
Еще ссылки по теме:

C++ Передача файла в функцию в качестве параметра
Передача массива в функцию в качестве параметра C++
C++ Передача массива в функцию, как параметра

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

Или воспользуйтесь поиском по форуму:
[WRG]
 Аватар для [WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
20.01.2014, 20:58  [ТС]     Передача параметра в функцию #12
Да, на самом деле он глобальный. Ошибся при набивании псевдокода.
Yandex
Объявления
20.01.2014, 20:58     Передача параметра в функцию
Ответ Создать тему
Опции темы

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