Ошибка компилятора: 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

Ответы:



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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.