2015-04-09 4 views
3

Я пытаюсь выяснить, как я могу сделать массив указателей на функции, находящиеся внутри класса. Где элемент в массиве представляет собой уникальную функцию.Массив указателей функций в C++

Tiles.h код:

class tiles: public box 
{ 
    public: 
     void north2east(float trans_x, float trans_y); 
     void north2west(float trans_x, float trans_y); 
     void south2east(float trans_x, float trans_y); 
     void south2west(float trans_x, float trans_y); 
}; 

Tiles.cpp код:

void tiles::north2east(float trans_x, float trans_y); { } 
void tiles::north2west(float trans_x, float trans_y); { } 
void tiles::south2east(float trans_x, float trans_y); { } 
void tiles::south2west(float trans_x, float trans_y); { } 

Я слышал, что вы можете сделать это, добавив следующее в файл Tiles.cpp:

typedef void (*FUNC_ARRAY) (float trans_x, float trans_y); 
FUNC_ARRAY functions[] = { 
    tiles::north2east, 
    tiles::north2west, 
    tiles::south2east, 
    tiles::south2west 
} 

Но это приносит мне сообщение об ошибке:

a value of type "void (tiles::*)(float trans_x, float trans_y)" cannot be used to initialize an entity of type "FUNC_ARRAY"

Подсказки и предложения по решению кода приветствуются!

+2

Этот typedef может использоваться только для обычных функций или статических функций-членов. – Barmar

+0

См. Http://www.warplife.com/tips/code/c++/member-pointers.html, как объявлять указатели на функции-члены. – Barmar

+0

Вы назначаете указатель на методы и не указываете на функции, поскольку вы не можете вызывать их без экземпляра объекта. –

ответ

5

Просто измените ваш typedef на:

typedef void (tiles::*FUNC_ARRAY) (float trans_x, float trans_y); 
//   ^^^^^^^ 

Ваш текущий ЬурейеЕ может быть использован только для регулярных функций и статических функций-членов. Что вам нужно, есть указатель на функцию-член.

+3

@VesmirPendel имеет в виду, что теперь вы сможете использовать этот метод только для объектов, например: 'tiles t; (t. * function [1]) (1.0, 1.0); 'или' tiles * t = new t; (t -> * функция [1]) (1.0, 1.0); ' –

Смежные вопросы