Bu mesajı gcc 4.3 üzerinde C ++ derlerken alıyorum
error: ‘NULL’ was not declared in this scope
Görünüyor ve yok oluyor ve nedenini bilmiyorum. Neden?
Teşekkürler.
Bu mesajı gcc 4.3 üzerinde C ++ derlerken alıyorum
error: ‘NULL’ was not declared in this scope
Görünüyor ve yok oluyor ve nedenini bilmiyorum. Neden?
Teşekkürler.
Yanıtlar:
NULL
bir anahtar kelime değil. Bazı standart başlıklarda tanımlanan bir tanımlayıcıdır. Dahil edebilirsiniz
#include <cstddef>
Diğer bazı temel bilgiler dahil olmak üzere kapsamda olması std::size_t
.
nullptr
gerçek bir anahtar kelime olan ve herhangi bir #include
s gerektirmeyen anahtar kelimeden bahsetmeye değer olabilir . Aynı zamanda daha fazla tip güvenlidir NULL
.
GCC, C ++ 11'e doğru adımlar atıyor, bu yüzden NULL sabitini kullanmak için şimdi cstddef eklemeniz gerekiyor . C ++ 11'de tercih edilen yol, sürüm 4.6'dan beri GCC'de uygulanan yeni nullptr anahtar sözcüğünü kullanmaktır . nullptr örtük olarak integral türlere dönüştürülemez, bu nedenle hem işaretçi hem de integral türleri için aşırı yüklenmiş bir işleve yönelik bir çağrıyı netleştirmek için kullanılabilir:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULL
hiçbir zaman yerleşik bir anahtar kelime olmadı; <stddef.h>
(veya <cstddef>
) dahil olmak üzere birkaç standart C başlığında tanımlanan bir makrodur . Gcc "C ++ 11'e doğru adımlar atmak" bunu nasıl etkiler? Soruda, (görünmeyen) kodun gcc / g ++ 'nın önceki sürümleriyle veya dil standardının önceki sürümleriyle derlendiğini ima eden hiçbir şey görmüyorum.
NULL
bir anahtar kelime değildir; 0 için bir makro ikamedir ve gelir stddef.h
veya cstddef
inanıyorum. Sen sahip #included
gr ++ görmez böylece, uygun bir başlık dosyasını NULL
düzenli değişken adı olarak ve bunu ilan etmedik.
Diğer cevapları tamamlamak için: Eğer C ++ 11 kullanıyorsanız nullptr
, null'a işaret eden bir void işaretçisi anlamına gelen bir anahtar sözcük olan kullanın. (bunun yerine, NULL
bir işaretçi türü olmayan)