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 #includesve 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:ideğer VALUE(ne olursa olsun) atanır .cppve 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 VALUEbirinde 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 #includebir .cppdosyaya.
(her zaman kullanmanız gerektiğini kabul eden) korumalar ekleyin: sizi #includetek bir .cppdosya derlerken aynı başlık dolaylı olarak birden çok kez olmak