컴파일러 오류 : memset이이 범위에서 선언되지 않았습니다.


101

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 및 우분투에서 잘 컴파일되는 이유입니다. 아무도 이유를 설명 할 수 있습니까?
Dennis

2
@Dennis : 아마도 필요한 헤더 <string.h>가 이전 gcc / Ubuntu 구성의 #include다른 #included 헤더 를 통해 간접적 으로 d 이기 때문일 것입니다 .
Paul R

@Dennis gcc 옵션에 -fpermissive를 추가하는 것도 이러한 이상한 경우에 도움이 될 수 있지만 해결 방법 일뿐입니다
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의 / / / etc 보다는 적절한 동등한 C ++ 헤더 인 <cstring>/ <cstdio>/ <cstdlib>/ etc를 사용하는 것이 좋습니다 .<string.h><stdio.h><stdlib.h>


37
큰! 당신은 우리에게 물고기를주는 대신에 낚시하는 법을 가르쳐주세요.
lukmac 2011 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.