Я занят инициализацией этого массива:
int menuNumber2FunctionDbase[]= { &functionA , &functionB , &functionC };
Но это дает: около инициализации для menuNumber2FunctionDbase
и: инициализация из несовместимого типа указателя
я пробовал int*
а также functionA
вместо &functionA
Что я делаю не так?
Если functionA
(B
, C
) это функция, которая возвращает int
и не принимает аргументов, вам нужно объявить ваш массив, чтобы иметь допустимый тип:
int (*menuNumber2FunctionDbase[])() = { functionA, functionB, functionC };
Ты можешь позвонить functionB
как это:
std::cout << menuNumber2FunctionDbase[1]() << std::endl;
Также, как предложил dmitri, вы можете определить тип вашего массива:
typedef int (*int_funct)();
int_funct menuNumber2FunctionDbase[] = { functionA, functionB, functionC };
РЕДАКТИРОВАТЬ
Как твой functieA
(B
, C
) являются функциями, которые не возвращают значения и не принимают аргументов, typedef должен выглядеть следующим образом:
typedef void (*void_funct)(void);
void_funct menuNumber2FunctionDbase[] = { functionA, functionB, functionC };
Без использования typedef
Объявление массива должно быть:
void (*menuNumber2FunctionDbase[])(void) = { functionA, functionB, functionC };
Решено! Вы, ребята, великолепны!
Что я изменил это: void (*menuNumber2FunctionDbase[])() = { functieA , functieB , functieC };
Другой вариант с typdef также хорош, но дает: (near initialization for 'menuNumber2FunctionDbase[2]')
как предупреждение
Работает как шарм! Большое спасибо!
Вы могли бы использовать std::function
, тогда вы можете использовать не только глобальные автономные функции, но и лямбды C ++ 11 или (с помощью std::bind
) функции-члены.
std::function<void()> menuNumber2FunctionDbase[] = {
functieA, functieB, functieC
};