2010-02-08 3 views
5

Я пытаюсь объявить процедуру обратного вызова в C++ следующим образом:Что означает ошибка «неполного типа»?

void register_rename (int (*function) (const char *current, const char *new)); 
    /*------------------------------------------------------------*/ 
    /* WHEN: The callback is called once each time a file is received and 
    * accepted. (Renames the temporary file to its permanent name) 
    * WHAT: Renames a file from the given current name to the specified new name. 
    */ 

Однако, я получаю следующее сообщение об ошибке:

line 204: error #70: 
     incomplete type is not allowed 
void register_rename (int (*function) (const char *current, const char *new)); 

я не уверен, как это исправить. У меня есть другие аналогичные процедуры обратного вызова, объявленные в том же заголовочном файле, и я не получаю эту ошибку.

Пожалуйста, помогите! :)

+11

подсветка синтаксиса дает полезную подсказку здесь ... – ephemient

+0

Вы также можете найти это проще код, если вы ЬурейеЕ function pointer: 'typedef int (* fn) (const char *, const char * newStr); void register_rename (fn); ' –

+1

Кроме того,' void register_rename (int (*) (const char *, const char *)); 'является эквивалентным прототипом; имена не нужны. – ephemient

ответ

19

Вы не можете использовать новое, потому что это ключевое слово. Попробуйте выбрать правильный идентификатор для вашего второго аргумента.

7

Вы не можете назвать переменную (или любой идентификатор) зарезервированным словом;

зарезервированные слова являются ключевыми словами

asm do if return try 
auto double inline short typedef 
bool dynamic_cast int signed typeid 
break else long sizeof typename 
case enum mutable static union 
catch explicit namespace static_assert unsigned 
char export **new** static_cast using 
class extern operator struct virtual 
const false private switch void 
const_cast float protected template volatile 
continue for public this wchar_t 
default friend register throw while 
delete goto reinterpret_cast true 

и альтернативные названия некоторых операторов

and and_eq bitand bitor compl not 
not_eq or or_eq xor xor_eq