2011-12-27 14 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 ; 
} 

compilazione on g ++ 4.1.2 20.070.115 (SUSE 10): Nessun problemaErrore di compilazione in g ++ 4.3.4 compilatore

compilazione on g ++ 4.3.4 (SUSE 11) dà seguente errore

nomeFile : 9: errore: dichiarazione di char * basename (const char *) genera diversa eccezione

fileName: 3: errore: dalla precedente dichiarazione char * basename (const char *) throw().

Gentilmente dimmi perché questo sta succedendo, c'è qualche interfaccia modificata in g ++ tra queste due versioni (se rimuovo l'inclusione di string.h allora la compilazione ha esito positivo su entrambe le versioni di g ++, C'è qualche modifica di interfaccia in string.h).

+2

Sì, il gcc 4.4.3 errore più dettagliato è visto affermando: /usr/include/string.h:601: errore: ambiguates vecchia dichiarazione 'const char * basename (const char *) ' –

risposta

3

appare come nome base già definito in 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 
Problemi correlati