8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 148
1

Массив указателей на функции внутри класса

27.04.2022, 08:11. Показов 1220. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот рабочая конструкция (в заголовке):

C++
1
2
3
4
void f1(int a);
void f2(int a);
typedef void(*func)(int a);
func functions[2] = { f1, f2 };
Как правильно записать это же чтобы внутри класса работало?

Если поместить в класс class cl {}, то будет ошибка:
"Значение типа void(cl::*)(int a) нельзя использовать для инициализации сущности типа cl::func"
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2022, 08:11
Ответы с готовыми решениями:

Использование указателей на функции-члены внутри самого класса
День добрый форум! Возник такой вопрос. В классе А есть 3 функции и массив, в котором хранятся...

Получить указатель на член функции класса и поместить в массив указателей на функции
Пишу так. class objsign_{public: void(objsign_::*objsign__)(char); HANDLE catalog;DWORD...

Массив указателей на функции-члены класса
Задача заключается в том, что в private надо создать статическую переменную символьного типа, в...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и...

6
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,330
27.04.2022, 08:26 2
MikeNew, приведи полный код, на который ругается компилятор. Подправим
1
8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 148
27.04.2022, 08:33  [ТС] 3
Если сделать так:

C++
1
2
3
4
void f1(int a);
void f2(int a);
typedef void(cl::*func)(int a);
func functions[2] = { f1, f2 };
то будет ошибка при компиляции:

error C3867: "cl::functions": нестандартный синтаксис; используйте "&", чтобы создать указатель на член

Добавлено через 1 минуту
Цитата Сообщение от Алексей1153 Посмотреть сообщение
MikeNew, приведи полный код, на который ругается компилятор. Подправим
Полный код на десятки тысяч строк, не получится. Я привел часть, которая вызывает ошибку.
0
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
27.04.2022, 08:34 4
Разве тип может принадлежать классу?
1
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,330
27.04.2022, 08:40 5
Лучший ответ Сообщение было отмечено MikeNew как решение

Решение

MikeNew,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
struct cl
{
    void f1(int a)
    {
        std::cout<<a;
    }
    void f2(int a){}
    using func=void(cl::*)(int a);
    func functions[2] = { &cl::f1, &cl::f2 };
};
 
int main()
{
    cl c;
    
    (c.*c.functions[0])(10);
}
1
8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 148
27.04.2022, 08:42  [ТС] 6
Вот так вроде ок, по крайне мере компилируется:

C++
1
2
3
4
void f1(int a);
void f2(int a);
typedef void(cl::*func)(int a);
func functions[2] = { &cl::f1, &cl::f2 };
Добавлено через 1 минуту
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Разве тип может принадлежать классу?
Получается что может.
0
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,330
27.04.2022, 08:44 7
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Разве тип может принадлежать классу?
запросто:

C++
1
2
3
4
5
6
class cl
{
    class type_within_cl//этот тип принадлежит классу cl
    {
    };
};
0
27.04.2022, 08:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2022, 08:44
Помогаю со студенческими работами здесь

Создать массив указателей базового класса и присвоить ему адреса каждого из екземпляров класса
Всем привет. Есть условие задачи: Дан базовый класс Base у которого есть метод my_name, метод...

Список указателей на функции внутри структуры
Доброго времени суток! Имеется некоторая структура ( содержит в себе указатели на начало и конец...

как сделать чтобы объект производного класса сам себя добавлял в список или массив указателей базового класса?
я хотел так, но программа просто падает void Student::add(Base** head) { cout &lt;&lt; &quot;I here&quot; &lt;&lt;...

Сравнение двух различных экземпляров класса внутри функции класса
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class Backpack { private: int...

Определить функции-члены класса для ввода и вывода членов-данных внутри объявления класса
Определить функции-члены класса для ввода и вывода членов-данных внутри объявления класса.

Использование функции класса внутри другого класса
И снова к нашим баранам.. Я задавал подобный вопрос, но тут возникла такая трабла: есть класс,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru