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

Указатель на фунцкию-член - C++

Восстановить пароль Регистрация
 
Apparat_UA
5 / 5 / 2
Регистрация: 06.01.2015
Сообщений: 114
09.12.2015, 13:38     Указатель на фунцкию-член #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
24
25
26
27
28
class Letter
{
public:
    void(Letter::*side[6])();
 
    Letter() 
    { 
        side[0] = front;
        side[1] = right_flang;
        side[2] = top;
        side[3] = bottom;
        side[4] = left_flang;
        side[5] = back;
    }
        void front();
        void right_flang();
        void top();
        void bottom();
        void left_flang();
        void back();
};
 
int main()
{
   Letter M;
   for(int i = 0; i < 6; i++)
       M.side[i]();
}
M.side[i](); Подчеркивает как ошибку. В чем проблема ?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2015, 13:38     Указатель на фунцкию-член
Посмотрите здесь:

Указатель на функцию член C++
Указатель на функцию - член класса. C++
C++ указатель на член в массиве
Указатель на функцию-член C++
C++ Указатель на функцию-член
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.12.2015, 13:53     Указатель на фунцкию-член #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Apparat_UA Посмотреть сообщение
В чем проблема ?
В том, что указатель на функцию-член должен быть вызван для объекта, а в твоем случае ты просто получаешь доступ к нестатическом члену данных side, и пытаешься вызвать без объекта.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
class Letter
{
public:
    void(Letter::*side[6])();
 
    Letter() 
    { 
        side[0] = &Letter::front;
        side[1] = &Letter::right_flang;
        side[2] = &Letter::top;
        side[3] = &Letter::bottom;
        side[4] = &Letter::left_flang;
        side[5] = &Letter::back;
    }
        void front() { std::cout << "front\n"; }
        void right_flang() { std::cout << "right_flang\n"; }
        void top() { std::cout << "top\n"; }
        void bottom() { std::cout << "bottom\n"; }
        void left_flang() { std::cout << "left_flang\n"; }
        void back() { std::cout << "back\n"; }
};
 
int main()
{
   Letter M;
   for(int i = 0; i < 6; i++)
       (M.*(M.side[i]))();
}
Apparat_UA
5 / 5 / 2
Регистрация: 06.01.2015
Сообщений: 114
09.12.2015, 14:20  [ТС]     Указатель на фунцкию-член #3
А если а хочу этот цикл засунуть в метод этого класса, как тогда вызывать методы из массива ?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.12.2015, 14:28     Указатель на фунцкию-член #4
Цитата Сообщение от Apparat_UA Посмотреть сообщение
как тогда вызывать методы из массива ?
Внутри нестатической функции-члена доступ к членам можно обеспечить уже без явного указания экземпляра.
Поэтому, самую внутреннюю M можно убрать, или заменить на this->. Однако экземпляр, на котором будет вызываться функция, всё равно нужен. Т.о.:
C++
1
(someInstance.*(this->side[i]))();
Пример функции-члена:
C++
1
2
3
4
void f() {
   for(int i = 0; i < 6; i++)
      (this->*side[i])();
}
Yandex
Объявления
09.12.2015, 14:28     Указатель на фунцкию-член
Ответ Создать тему
Опции темы

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