2010-02-08 24 views
5

estoy tratando de declarar una rutina de devolución de llamada en C++ de la siguiente manera:¿Qué significa el error "tipo incompleto no permitido"?

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. 
    */ 

Sin embargo, me sale el siguiente error:

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

No estoy seguro de cómo corregir esto. Tengo otras rutinas de devolución de llamada similares declaradas en el mismo archivo de encabezado, y no obtengo este error.

Por favor ayuda! :)

+11

resaltado de sintaxis da una pista útil aquí ... – ephemient

+0

También puede encontrarlo más fácil de codificar si el typedef puntero de función: 'typedef int (* fn) (const char *, const char * newStr); void register_rename (fn); ' –

+1

Además,' void register_rename (int (*) (const char *, const char *)); 'es un prototipo equivalente; los nombres no son necesarios – ephemient

Respuesta

19

No se puede usar nuevo porque es una palabra clave. Intenta elegir un identificador válido para tu segundo argumento.

7

No puede nombrar una variable (o cualquier identificador) con una palabra reservada;

palabras reservadas son palabras clave

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 

y alternativas nombres de algunos operadores

and and_eq bitand bitor compl not 
not_eq or or_eq xor xor_eq 
Cuestiones relacionadas