Compilerfehler: memset wurde in diesem Bereich nicht deklariert


100

Ich versuche mein C-Programm in Ubuntu 9.10 (gcc 4.4.1) zu kompilieren.

Ich erhalte diesen Fehler:

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

Das Problem ist jedoch, dass ich bereits in meine CPP-Datei aufgenommen habe:

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

Und das gleiche Programm kompiliert gut unter Ubuntu 8.04 (gcc 4.2.4).

Bitte sag mir, was ich vermisse.


2
Was ich immer noch nicht verstehe, ist, warum es auf älteren Versionen von gcc & ubuntu gut kompiliert wird und nicht auf neueren Versionen. Kann jemand erklären warum?
Dennis

2
@ Dennis: wahrscheinlich , weil der notwendige Header <string.h>wird wird #includeüber einen anderen indirekt d #included - Header in Ihrem älteren gcc / Ubuntu - Konfiguration.
Paul R

@ Tennis Hinzufügen -fpermissive zu den gcc-Optionen könnte auch in diesen seltsamen Fällen helfen, obwohl es nur eine Problemumgehung ist
emu

Antworten:


172

Sie sollten einschließen <string.h>(oder das C ++ - Äquivalent <cstring>).


135

Wenn Sie ein solches Problem haben, rufen Sie einfach die Manpage für die betreffende Funktion auf und erfahren Sie, welcher Header Ihnen fehlt, z

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

Beachten Sie, dass es für C ++ im Allgemeinen vorzuziehen ist, die richtigen äquivalenten C ++ - Header <cstring>/ <cstdio>/ <cstdlib>/ etc anstelle von Cs <string.h>/ <stdio.h>/ <stdlib.h>/ etc. Zu verwenden.


37
Toll! Sie bringen uns das Fischen bei, anstatt uns einen Fisch zu geben, Daumen hoch!
Lukmac
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.