#c #map #function-pointers
#c #словарь #указатели на функции
Вопрос:
Итак, у меня есть указатель на функцию, определенный как:
unsigned static int (*current_hash_function)(unsigned int);
И я пытаюсь создать карту указателей на имена функций:
typedef std::map<fptr_t, std::string> function_map_t;
Но я получаю эту ошибку:
src/main.h:24: ошибка: ISO C запрещает объявление
‘fptr_t’
без типа
Другой код:
main.h:
typedef (*fptr_t)(unsigned int*);
typedef std::map<fptr_t, std::string> function_map_t;
function_map_t fmap;
Комментарии:
1. Не ответ на ваш вопрос, но… Если ваш компилятор поддерживает некоторые функции C 0x, я бы предложил использовать std::function вместо typedefs для указателей на функции. Их будет легче читать и они будут более гибкими.
Ответ №1:
Ваш код «main.h» не присваивает указателю функции typedef возвращаемый тип. Это работает для меня:
#include <map>
#include <string>
int main()
{
typedef unsigned (*fptr_t)(unsigned);
typedef std::map<fptr_t, std::string> function_map_t;
function_map_t fmap;
}
Ответ №2:
Вы пропустили возвращаемый тип:
typedef int (*fptr_t)(unsigned int*);
Ответ №3:
Typedef вашего указателя на функцию равен:
typedef unsigned int (*fptr_t)(unsigned int)
…затем вы можете объявить свою карту следующим образом:
typedef std::map<fptr_t, std::string> function_map_t;
Ответ №4:
Вы не забыли ввести defна указателе функции?
typedef unsigned int (*fptr_t)(unsigned int);
Я считаю, что это правильный синтаксис
Комментарии:
1.
unsigned static int
это бессмысленно.2. Это правда, я просто скопировал его footprint функции
3. Он соответствует формату
typedef return_type (*name)(arg1_type, .., argN_type)
, так что, я полагаю, вы правы.4. Я знаю, вот почему я не понизил его. ;-] Просто указываю, что это не был правильный синтаксис.
Ответ №5:
В вашем typedef
указателе на функцию отсутствует возвращаемый тип:
typedef unsigned int (*fptr_t)(unsigned int *);
Приведенное выше является typedef
для указателя на функцию, которая возвращает unsigned int
и имеет unsigned int *
в качестве параметра.