Derleyici hatası: memset bu kapsamda bildirilmedi


101

C programımı Ubuntu 9.10'da (gcc 4.4.1) derlemeye çalışıyorum.

Bu hatayı alıyorum:

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

Ama sorun şu ki, cpp dosyama zaten ekledim:

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

Ve aynı program Ubuntu 8.04 (gcc 4.2.4) altında iyi derler.

Lütfen bana neyi kaçırdığımı söyle.


2
Hala anlamadığım bir şey, neden daha yeni sürümlerde değil, gcc & ubuntu'nun eski sürümlerinde iyi bir şekilde derlediği. Biri nedenini açıklayabilir mi?
Dennis

2
@Dennis: Muhtemelen gerekli üstbilgi <string.h>, eski gcc / Ubuntu yapılandırmanızdaki #includebaşka bir #included üstbilgisi aracılığıyla dolaylı olarak d olduğu için .
Paul R

@Dennis Sadece geçici bir çözüm olsa da, gcc seçeneklerine -fpermissive eklemek de bu garip durumlarda yardımcı olabilir
emu

Yanıtlar:


172

Dahil etmelisiniz <string.h>(veya C ++ eşdeğeri <cstring>).


135

Nerede böyle bir sorunla karşılaşırsanız karşılaşın , söz konusu fonksiyonun man sayfasına gidin ve size hangi başlığın eksik olduğunu söyleyecektir, örn.

$ 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 ++ için bu, uygun bir eş C ++ başlıkları kullanmak genellikle tercih olduğunu Not <cstring>/ <cstdio>/ <cstdlib>yerine Cı-en fazla / etc <string.h>/ <stdio.h>/ <stdlib.h>/ vb.


37
Harika! Bize balık vermek yerine balık tutmayı öğretiyorsun, başparmak yukarı!
lukmac
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.