2013-07-28 3 views
4

Я пытаюсь вернуть указатель на функцию без использования typedef, но компилятор (gcc) испускает странную ошибку, как если бы я не мог делать такого рода установка.Ошибка в возврате указателя функции в C++ без typedef

Примечания: С использованием кода typedef работает.

код:

void catch_and_return(void (*pf)(char*, char*, int&), char *name_one, char* name_two, int& number)(char*, char *, int&) 
{ 
    pf(name_one, name_two, number); 

    return pf; 
} 

Ошибка:

'catch_and_return' объявлена ​​как функция возвращает функцию

Можете ли вы объяснить мне, почему компилятор не позволяет мне это делать? Спасибо!

+1

Можете ли вы показать код typedef? Это упростит понимание того, что именно вы пытаетесь сделать. –

+1

Это должно быть 'void (* catch_and_return (void (* pf) (char *, char *, int &), char * name_one, char * name_two, int & number)) (char *, char *, int &)' смотреть на ответы на [этот вопрос] (http://stackoverflow.com/questions/997821/how-to-make-a-function-return-a-pointer-to-a-function-c) для некоторых примеров. – PeterT

+0

Ради вашего здравомыслия, [std :: function] (http://en.cppreference.com/w/cpp/utility/functional/function) –

ответ

7

Объявите вашу функцию в следующем виде:

void (*catch_and_return(void (*pf)(char*, char*, int&), char *name_one, char* name_two, int& number))(char*, char *, int&) 
{ 
    pf(name_one, name_two, number); 

    return pf; 
} 

Синтаксис функции, которая возвращает функции является:

возвращается функция обратного типа (* имя-функции (параметр -list)) (Список функций-к-возврату-параметров)

Примечание: Эти объявления могут быть громоздкими, чтобы понять на первый взгляд, использовать typedef всякий раз, когда это возможно

+0

Спасибо, парень, да, я просто хотел знать, не typedef –

+0

Добро пожаловать! – higuaro

+0

Где находится тип функции, которая является аргументом? – soandos

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