Ошибка компилятора: memset не был объявлен в этой области

101

Я пытаюсь скомпилировать свою программу на C в Ubuntu 9.10 (gcc 4.4.1).

Я получаю эту ошибку:

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

Но проблема в том, что я уже включил в свой файл cpp:

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

И эта же программа отлично компилируется под Ubuntu 8.04 (gcc 4.2.4).

Скажите, пожалуйста, что мне не хватает.

Майкл
источник
2
Я до сих пор не понимаю, почему он отлично компилируется в старых версиях gcc и ubuntu, а не в новых. Кто-нибудь может объяснить почему?
Деннис
2
@Dennis: вероятно , потому что необходимо заголовок <string.h>в настоящее время #included косвенно через какой - либо другой #includeзаголовок г в вашем старше ССАГПЗ / Ubuntu конфигурации.
Paul R
@Dennis Добавление -fpermissive к параметрам gcc также может помочь в этих странных случаях, хотя это всего лишь обходной путь
emu

Ответы:

172

Вы должны включить <string.h>(или его эквивалент в C ++ <cstring>).

что-то
источник
135

Когда бы вы ни столкнулись с такой проблемой, просто перейдите на страницу руководства для соответствующей функции, и она сообщит вам, какой заголовок вам не хватает, например

$ 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);

Обратите внимание, что для C ++ обычно предпочтительнее использовать соответствующие эквивалентные заголовки C ++, <cstring>/ <cstdio>/ <cstdlib>/ etc, а не C <string.h>/ <stdio.h>/ <stdlib.h>/ etc.

Пол Р
источник
37
Большой! Вы учите нас ловить рыбу вместо того, чтобы давать нам рыбу, палец вверх!
lukmac 06