2012-07-18 16 views
7

Üçüncü taraf kitaplığı kullanarak bazı çalışmalara başlıyorum ve Visual Studio 2010'da oluştururken, birçok kez bu bağlayıcı uyarısı aldığımı fark ettim (LNK4221). Bağlanan nesne dosyalarını oluştururken kullanılan kaynaklara baktım ve bunların tüm uygulamalarının başlık dosyalarında bulunduğunu tespit ettim. İlginç bir şekilde, projenin, uygulama ile birlikte başlık için sadece #include içeren karşılık gelen .cpp dosyalarını içerdiğini fark ettim.Sadece bir #include içeren bir .cpp dosyasının noktası nedir?

Merak ediyorum - bunun amacı nedir ve neden bu tekniği kullanmak istiyorum? .cpp dosyaları projeye herhangi bir değer eklemiyorsa, neden bağlayıcı uyarılardan kurtulmak için onları kaldırmamam gerekir?

Benzer sorular aramayı denedim, ancak ilgi çekici bir şey bulamadım. Herhangi birini biliyorsanız, lütfen onları bağlayın.

+0

Bu bir uyarıdır, bir hata değil. –

+0

Evet, biliyorum. Uyarı hakkında sadece bir tek #include içeren .cpp dosyaları kullanma tekniğinden daha az endişeliyim. –

+2

İki olası motivasyon: 1 - Her zaman .h'/'.cpp' çiftlerine sahip olmak için iyi bir uygulama sayılabilir. Belki de yazar, daha sonra .cpp'ye ekleyebileceklerini düşündü. 2 - Bir '.h' dosyası bir nesne dosyasına derlenemez, bir' .cpp' dosyası olabilir. – BoBTFish

cevap

1

Başlığın en az bir konumda ilk konumda yer aldığından emin olmak için bunu kullanıyorum. Bunu yaparak, üstbilginin kendi başına karşılaştırılabilir olmasını sağlarım.

bir uyarı değil linker convence için, bir çok büyük değişkenle harici değişkeni kullanabilirsiniz:

int variable_with_a_name_that_includes_the_file_name_somehow = 42; 
+0

Evet, bu mantıklı, ancak daha sonra bu başlığı daha sonra başka bir yerde kullandıysanız bu dosyayı kaldırır mısınız? –

+0

@Joe no, başka bir yere eklendiğinde, emin olmak zordur, gelecekte de öyle olacaktır ve bundan önce hiç kimse ekleyemeyecektir. –

+0

Tamam, bu durumda, sadece yolda yanlış kullanımlara karşı güvenli koruma görevi görür. Teşekkürler! –

2

tek #include d dosya stdafx.h oldu mu? I. Bu durumda, precompiled headers ile uğraşıyorsunuz. Normal kurulum, "precompiled headers" derleyici seçeneği içeren bir .cpp dosyası ve projenizdeki .cpp dosyalarının geri kalanı "pch kullan" seçeneğidir.

+0

Hayır, aslında stdafx.h değildi, ama daha önce cevap aradığımda referans buldum. Ancak, bu hala yararlı bilgiler, bu yüzden teşekkür ederim! –

İlgili konular