Создание динамического массива из 3 указателей на функции в классе, к которым можно получить доступ из main.cpp

В настоящее время я создал класс с именем A, который создает массив указателей на функции, а также объявил прототипы функций, пожалуйста, просмотрите A.h ниже.

#ifndef A_H
#define A_H

class A
{
    public:

        //Function Definitions that will be called from the seq function below.

        A::A()
        //prototype functions that will be pointed to from array 
        void f1(int);
        void f2(int);
        void f3(int);

        void (*funcs[3])(int);
        //Destructor method
        virtual ~A();    
};

Затем у меня есть A.cpp, определенный ниже с определениями функций f1, f2, f3.

A::A()
{

}

void A::f1(int a){ cout << "This is f1: " << endl; }
void A::f2(int b){ cout << "This is f2: " << endl; }
void A::f3(int c){ cout << "This is f3: " << endl; }

//Would this be valid?
funcs[0] = f1;
funcs[1] = f2;
funcs[2] = f3;

A::~A()
{
    //dtor
}

Как мне получить доступ к массиву из main.cpp

include "A.h"
.
.
.


int main()
{
    //This doesn't work, what is the proper way to access the pointers to functions?
    A a;
    a.funcs[0](1);

}

Должен распечатать «Это f1:». Это действительно беспокоило меня, я читал разные темы и даже использовал typedefs, но безрезультатно. Любая помощь будет действительно оценена. Если вам нужна дополнительная информация, пожалуйста, дайте знать.


person Kevag6    schedule 04.02.2018    source источник
comment
//Would this be valid? Нет. Здесь нельзя использовать функции-члены класса, отличные от static. Я бы рекомендовал вам использовать std::function и лямбда-выражение для захвата a.   -  person    schedule 04.02.2018
comment
Ваши функции не являются функциями. Это методы класса, которые не являются функциями. Вот почему ваш компилятор отказывается это компилировать. Объявите свои методы класса как static, если вы хотите, чтобы они были реальными функциями, а не методами класса.   -  person Sam Varshavchik    schedule 04.02.2018
comment
@Sam Это методы класса, которые не являются функциями. Эта терминология для меня нова. Я всегда думал, что функция-член класса — правильный термин, не так ли? А почему это не функции?   -  person    schedule 04.02.2018
comment
@AlgirdasPreidžius Спасибо за ссылку. Я думаю, прежде чем задавать вопрос, я должен углубиться в свои исследования. я дам вам знать, если я выясню это. Спасибо еще раз.   -  person Kevag6    schedule 04.02.2018
comment
@TheDude - см. stackoverflow.com/q/18282330/2785528 для обсуждения терминологии и ответов. Меня это удивило.   -  person 2785528    schedule 04.02.2018
comment
@ DOUGLASO.MOEN Хотя я нахожу эту терминологию просто запутанной.   -  person    schedule 04.02.2018
comment
@ Kevag6 Полагаю, прежде чем задавать вопрос, я должен углубиться в свое исследование. Да, от вас ожидается провести исследование, прежде чем задавать вопрос. И я не знаю, как копать глубже, так как это была вторая ссылка в поисковике, которую я использую.   -  person Algirdas Preidžius    schedule 04.02.2018
comment
Они не являются функциями, потому что вы просто не можете вызывать их сами по себе, как f1();. У вас должен быть экземпляр класса, метод которого можно вызвать, например a.f1();.   -  person Sam Varshavchik    schedule 04.02.2018