Как инициализировать этот массив, заполненный & amp; functionA, & amp; functionB?

Я занят инициализацией этого массива:

int menuNumber2FunctionDbase[]= { &functionA , &functionB , &functionC };

Но это дает: около инициализации для menuNumber2FunctionDbase
и: инициализация из несовместимого типа указателя

я пробовал int* а также functionA вместо &functionA

Что я делаю не так?

0

Решение

Если 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 };
4

Другие решения

Решено! Вы, ребята, великолепны!

Что я изменил это: void (*menuNumber2FunctionDbase[])() = { functieA , functieB , functieC };

Другой вариант с typdef также хорош, но дает: (near initialization for 'menuNumber2FunctionDbase[2]') как предупреждение

Работает как шарм! Большое спасибо!

0

Вы могли бы использовать std::function, тогда вы можете использовать не только глобальные автономные функции, но и лямбды C ++ 11 или (с помощью std::bind) функции-члены.

std::function<void()> menuNumber2FunctionDbase[] = {
functieA, functieB, functieC
};
0
По вопросам рекламы [email protected]