コンパイラエラー:memsetはこのスコープで宣言されていません


100

Ubuntu 9.10(gcc 4.4.1)でCプログラムをコンパイルしようとしています。

このエラーが発生しています:

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>が古いgcc / Ubuntu構成の#include他の#includedヘッダーを介して間接的に作成されているためです。
ポールR

@Dennis -fpermissiveをgccオプションに追加することも、これらの奇妙なケースで役立つ可能性がありますが、これは単なる回避策です
emu

回答:


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のがよりは、/ etc <string.h>/ <stdio.h>/ <stdlib.h>の/ etc。


37
すごい!あなたは私たちに魚を与える代わりに、私たちに釣り方を教えて、親指を立てます!
lukmac '10
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.