Во-первых, у меня есть функции как это.
void func1();
void func2();
void func3();
Тогда я создаю свое определение типа для массива:
void (*FP)();
Если я пишу нормальный массив указателей функции, это должно быть что-то вроде этого:
FP array[3] = {&func1, &func2, &func3};
Я хочу сделать это постоянным массивом, с помощью константы перед "FP", но у меня есть это сообщения об ошибках:
ошибка: не может преобразовать 'пусто (*) ()' для 'освобождения (* константа) ()' inialization
PD: Извините мой плохой английский язык.
Править:
x.h
typedef void (*FP)();
class x
{
private:
int number;
void func1();
void func2();
void func3();
static const FP array[3];
}
x.cpp
const FP x::array[3] = {&x::func1, &x::func2, &x::func3};
Мой код является более большим и сложным, это - сводка
Затем я создаю свой typedef для массива:
void (* FP) ();
Вы пропустили typedef
перед void
?
Следующие работы над моим компилятором.
void func1(){}
void func2(){}
void func3(){}
typedef void (*FP)();
int main()
{
const FP ar[3]= {&func1, &func2, &func3};
}
xh
class x;
typedef void (x::*FP)(); // you made a mistake here
class x
{
public:
void func1();
void func2();
void func3();
static const FP array[3];
};
Какой компилятор вы используете? Это работает на VS2005.
#include <iostream>
void func1() {std::cout << "func1" << std::endl;}
void func2() {std::cout << "func2" << std::endl;}
void func3() {std::cout << "func3" << std::endl;}
int main()
{
int ret = 0;
typedef void (*FP)();
const FP array[3] = {&func1, &func2, &func3};
return ret;
}
typedef void (*FPTR)();
FPTR const fa[] = { f1, f2};
// fa[1] = f2; You get compilation error when uncomment this line.
Если вы хотите, чтобы сам массив был константным:
FP const a[] =
{
func1,
func2,
func3
};