Помилка компілятора: 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 конфігурації.
Пол Р.

@Dennis Додавання -fpermissive в опцію GCC також можу допомогти в тих дивних випадках, хоча це всього лише обхідний шлях
ему

Відповіді:


172

Ви повинні включити <string.h>(або його C ++ еквівалент <cstring>).


135

У будь-якому випадку у вас виникає така проблема, просто перейдіть на сторінку man для функції, про яку йдеться, і вона підкаже, який заголовок вам не вистачає, наприклад

$ 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>/ тощо, а не C <string.h>/ <stdio.h>/ <stdlib.h>/ тощо.


37
Чудово! Ви вчите нас, як ловити рибу, а не давати нам рибу, великим пальцем!
lukmac
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.