Как вы объявляете const-массив указателей на функции?
Во-первых, у меня есть такие функции.
void func1();
void func2();
void func3();
Затем я создаю свой typedef для массива:
void (*FP)();
Если я напишу обычный массив указателей на функции, это должно быть примерно так:
FP array[3] = {&func1, &func2, &func3};
Я хочу сделать его постоянным массивом, используя const до "FP", но у меня есть это сообщение об ошибке:
error: невозможно преобразовать 'void (*)()' в 'void (* const)()' инициализация
PD: Извините, мой плохой английский.
EDIT:
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};
Мой код более крупный и сложный, это сводка
Ответы
Ответ 1
Затем я создаю свой typedef для массива: void (*FP)();
Пропустили ли вы typedef
до void
?
После работы над моим компилятором.
void func1(){}
void func2(){}
void func3(){}
typedef void (*FP)();
int main()
{
const FP ar[3]= {&func1, &func2, &func3};
}
EDIT
(после просмотра ваших изменений)
x.h
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];
};
Ответ 2
без typedef
:
void (*const fp[])() = {
f1,
f2,
f3,
};
Ответ 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;
}
Ответ 4
typedef void (*FPTR)();
FPTR const fa[] = { f1, f2};
// fa[1] = f2; You get compilation error when uncomment this line.
Ответ 5
Если вы хотите, чтобы массив сам был const:
FP const a[] =
{
func1,
func2,
func3
};