Bu sorunun gelecekteki izleyicileri için, monkey0506'nın önerdiğinden kaçınmanız gerektiğini belirtmek istiyorum .
Başlık dosyaları bildirimler içindir.
Başlık dosyaları .cpp
, doğrudan veya dolaylı olarak her dosya için bir kez derlenir #includes
ve daha önce herhangi bir fonksiyonun dışındaki kodlar program başlatma sırasında çalıştırılır main()
.
: foo::i = VALUE;
Başlığına koyarak , her dosya için foo:i
değer VALUE
(ne olursa olsun) atanır .cpp
ve bu atamalar main()
çalıştırılmadan önce (bağlayıcı tarafından belirlenen) belirsiz bir sırada gerçekleşir .
Dosyalarımızdan #define VALUE
birinde farklı bir sayı olursak ne olur .cpp
? İyi derlenecek ve programı çalışana kadar hangisinin kazandığını bilmenin hiçbir yolu olmayacak.
Aynı nedenle sizin bu asla bir başlık içine yürütülen kod koymak asla #include
bir .cpp
dosyaya.
(her zaman kullanmanız gerektiğini kabul eden) korumalar ekleyin: sizi #include
tek bir .cpp
dosya derlerken aynı başlık dolaylı olarak birden çok kez olmak