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

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

Войти
Регистрация
Восстановить пароль
 
[WRG]
 Аватар для [WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
#1

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

15.01.2014, 23:36. Просмотров 396. Ответов 11
Метки нет (Все метки)

Проблема заключается в следующем.
Есть функция, вот её прототип.
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 не из класса и не для члена класса, то всё работает. Подскажите пожалуйста, как правильно вызвать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2014, 23:36     Передача параметра в функцию
Посмотрите здесь:

C++ Передача двумерного массива, как параметра в функцию
C++ Передача массива, как формального параметра в функцию
передача параметра в функцию C++
Передача параметра, выделенного в куче, в функцию C++
Передача функции (как параметра) в функцию унаследоваемого класса C++
C++ Передача файла в функцию в качестве параметра
Передача массива в функцию в качестве параметра C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.01.2014, 00:20     Передача параметра в функцию #2
Указатель на метод - это не указатель на функцию.
ValeryS
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
16.01.2014, 00:23     Передача параметра в функцию #3
сделай метод статик
при компиляции программы неизвестен адрес метода
вдруг ни одного объекта не будет
а статик гарантировано ляжет в память
alsav22
5410 / 4806 / 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
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
16.01.2014, 00:26     Передача параметра в функцию #5
Цитата Сообщение от alsav22 Посмотреть сообщение
&Foo::ololo
мдя про это я и забыл давненько указателями на методы не пользовался
alsav22
5410 / 4806 / 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
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
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
5410 / 4806 / 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++
Передача параметра по указателю в виртуальную функцию C++
C++ Передача параметра в функцию класса

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

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

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