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

biên soạn trên g ++ 4.1.2 20.070.115 (SUSE 10): Không có vấn đềCompilation Lỗi trong g ++ 4.3.4 biên dịch

biên soạn trên g ++ 4.3.4 (SUSE 11) tạo ra khoảng sau lỗi

fileName : 9: error: khai báo char * basename (const char *) ném ngoại lệ khác nhau

tên tệp: 3: error: from declaration declaration char * basename (const char *) throw().

Vui lòng cho tôi biết tại sao điều này xảy ra, Có giao diện nào thay đổi trong g ++ giữa hai bản phát hành này không (nếu tôi xóa bỏ chuỗi. Sau đó biên dịch thành công trên cả hai phiên bản g ++, Có bất kỳ thay đổi Giao diện nào trong chuỗi.h).

+2

Vâng, trên gcc 4.4.3 lỗi tiết hơn được nhìn thấy trong đó nêu: /usr/include/string.h:601: lỗi: ambiguates cũ tuyên bố 'const char * basename (const char *) ' –

Trả lời

3

trông giống như basename đã được xác định trong 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 
Các vấn đề liên quan