2011-12-27 16 views
5
#include <iostream> 
#include <string.h> 
char* basename(const char* filname); 
int main() 
{ 
    return 0; 
} 
char *basename(const char* filename) 
{ 
    char* base = (char *)filename; 
    return base ; 
} 

compilar en g ++ 4.1.2 20070115 (SUSE 10): No cuestiónerror de compilación en g ++ 4.3.4 compilador

compilar en g ++ 4.3.4 (SUSE 11) da error siguiente

nomArchivo : 9: error: declaración de char * basename (const char *) arroja una excepción diferente

fileName: 3: error: de la declaración anterior char * basename (const char *) throw().

Amablemente dime por qué está sucediendo esto, ¿Hay alguna interfaz cambiada en g ++ entre estas dos versiones (si elimino la inclusión de string.h luego el éxito de la compilación en ambas versiones de g ++, es cualquier cambio de interfaz en string.h)

+2

Sí, en GCC es visto 4.4.3 de error más detallado indicando: /usr/include/string.h:601: Error: ambiguates antigua declaración 'const char * basename (const char *) ' –

Respuesta

3

se parece a nombre base ya definido en string.h

# ifndef basename 
/* Return the file name within directory of FILENAME. We don't 
    declare the function if the `basename' macro is available (defined 
    in <libgen.h>) which makes the XPG version of this function 
    available. */ 
# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO 
extern "C++" char *basename (char *__filename) 
    __THROW __asm ("basename") __nonnull ((1)); 
extern "C++" __const char *basename (__const char *__filename) 
    __THROW __asm ("basename") __nonnull ((1)); 
# else 
extern char *basename (__const char *__filename) __THROW __nonnull ((1)); 
# endif 
# endif 
Cuestiones relacionadas