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:
NULLbir 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.
nullptrgerçek bir anahtar kelime olan ve herhangi bir #includes 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.
NULLhiç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.
NULLbir anahtar kelime değildir; 0 için bir makro ikamedir ve gelir stddef.hveya cstddefinanıyorum. Sen sahip #includedgr ++ görmez böylece, uygun bir başlık dosyasını NULLdü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, NULLbir işaretçi türü olmayan)