编译器错误:未在此范围内声明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>#include通过#include较旧的gcc / Ubuntu配置中的其他d标头间接地d的。
Paul R

@Dennis在gcc选项中添加-fpermissive在那些怪异的情况下也可能有所帮助,尽管这只是一种解决方法
emu

Answers:


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 ++标头<cstring>/ <cstdio>/ <cstdlib>/ etc,而不是C的<string.h>/ <stdio.h>/ <stdlib.h>/ etc。


37
大!您教我们如何钓鱼,而不是给我们一条鱼,竖起大拇指!
lukmac
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.