Массив указателей на функции-члены

239
19 мая 2017, 16:50

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

#include <iostream>
using namespace std;
class A {    
    private:
        static char x;
    protected:
        char q = 1;
        char w = 2;
        char e = 3;
    public:
        void func1(void){
            cout<<"func 1"<<endl;
        };
        void func2(void){
            cout<<"func 2"<<endl;
        };
        void (*func[])(void) = {func1, func2};
};
int main() {
    A ob;
    for(int i=0; i < sizeof(ob.func); i++)
    {
         ob.func[i]();
    }
    return 0;
}

Вот ошибки:

19  39  C:\Users\User\Desktop\Ìåðñîâ\laBa.cpp [Error] too many initializers for 'void (* [0])()'
19  39  C:\Users\User\Desktop\Ìåðñîâ\laBa.cpp [Error] cannot convert 'A::func1' from type 'void (A::)()' to type 'void (*)()'
19  39  C:\Users\User\Desktop\Ìåðñîâ\laBa.cpp [Error] cannot convert 'A::func2' from type 'void (A::)()' to type 'void (*)()'
Answer 1
  1. C++ не поддерживает синтаксис с неявным определением размера массива при объявлении члена класса с in-class инициализатором. Размер массива надо указывать явно.

  2. Указатель на функцию-член класса имеет тип ReturnType (ClassType::*)(ParameterTypes), а у вас объявлены указатели на обычные функции.

  3. Формирование указателя на функцию-член класса всегда требует явного использования оператора & и указания квалифицированного имени функции.

    void (A::*func[2])(void) = { &A::func1, &A::func2 };
  4. Синтаксис вызова функции через указатель также неверен. В данном случае это будет

    (ob.*ob.func[i])();
  5. Почему цикл по i вдруг итерирует до sizeof(ob.func)???

READ ALSO
Инициализация массива объектов

Инициализация массива объектов

Здравствуйте, уважаемое сообществоСтолкнулся с ситуацией, требующей Вашего пояснения

256
Измерение разниц в секундах между двумя значениями времени

Измерение разниц в секундах между двумя значениями времени

Нужно замерить время работы программы, используются объекты класса

241
Помогите перевести код с Pascal на C++ [требует правки]

Помогите перевести код с Pascal на C++ [требует правки]

Задача: Генерирование всех k-элементных подмножеств множества {1,

198
ignore case for JavaScript

ignore case for JavaScript

Давая ответ на заданный кодом вопрос пользователь не должен беспокоиться о регистре

236