2010-03-24 32 views
78

Tôi đang cố gắng biên dịch chương trình C của mình trong Ubuntu 9.10 (gcc 4.4.1).Lỗi biên dịch: memset không được khai báo trong phạm vi

Tôi nhận được lỗi này:

Rect.cpp:344: error: ‘memset’ was not declared in this scope 

Nhưng vấn đề là tôi đã bao gồm trong tập tin cpp của tôi:

#include <stdio.h> 
#include <stdlib.h> 

Và cùng một chương trình biên dịch tốt dưới Ubuntu 8.04 (gcc 4.2. 4).

Vui lòng cho tôi biết tôi đang thiếu gì.

+2

Điều tôi vẫn chưa hiểu là tại sao nó biên dịch tốt trên các phiên bản cũ hơn của gcc & ubuntu chứ không phải trên các phiên bản mới hơn. Bất cứ ai có thể giải thích lý do tại sao? – Dennis

+2

@ Dennis: có lẽ vì tiêu đề cần thiết '' đang được '# include'd gián tiếp thông qua một số tiêu đề' # include'd khác trong cấu hình gcc/Ubuntu cũ của bạn. –

+0

@Dennis Adding -fpermissive cho các tùy chọn gcc cũng có thể giúp đỡ trong những trường hợp lạ, mặc dù nó chỉ là một workaround – emu

Trả lời

137

Bạn nên bao gồm <string.h> (hoặc tương đương C++, <cstring>).

113

Whevever bạn gặp vấn đề như thế này chỉ cần truy cập man page for the function được đề cập và nó sẽ cho bạn biết bạn đang thiếu tiêu đề nào, ví dụ:

$ man memset 

MEMSET(3)    BSD Library Functions Manual    MEMSET(3) 

NAME 
    memset -- fill a byte string with a byte value 

LIBRARY 
    Standard C Library (libc, -lc) 

SYNOPSIS 
    #include <string.h> 

    void * 
    memset(void *b, int c, size_t len); 

Lưu ý rằng đối với C++ nó thường thích hợp hơn để sử dụng tương đương với C++ đúng tiêu đề, <cstring>/<cstdio>/<cstdlib>/etc, chứ không phải C <string.h>/<stdio.h>/<stdlib.h>/etc.

+30

Tuyệt vời! Bạn dạy chúng tôi cách câu cá thay vì cho chúng tôi một con cá, hãy giơ ngón tay cái lên ! – lukmac

+1

nếu tất cả những người khác không đọc được hướng dẫn – pm100

Các vấn đề liên quan