"'_snprintf': is not a member of 'std'" hatası gerçek sebebi ve çözümü

Kaptan Yosun

Co-Co Admin
Moderatör
Geliştirici
Yardımsever Üye
Usta Üye
Mesaj
1.539
Çözümler
56
Beğeni
2.931
Puan
1.839
Ticaret Puanı
0
Bu hatayı daha önce paylaşmış ve çözümü boost kütüphanesini düzenleyerek yapmıştım. Ancak bu iyi bir yol değil. Kütüphaneyi güncelleyince aynı hata bir daha gelecek çünkü. Bu hatanın asıl sebebi:

Server/db/stdafx.h içindeki bu makro
C++:
Genişlet Daralt Kopyala
#define snprintf _snprintf

Sebebi ise eski Visual Studio sürümlerinde standart snprintf desteği olmadığı için zamanında compatibility amacıyla böyle macro kullanılması. Ancak modern MSVC ve modern Boost artık standart std::snprintf kullanıyor.

Bu macro yüzünden Boost içindeki:

C++:
Genişlet Daralt Kopyala
std::snprintf(...)

ifadesi preprocess sonrası şuna dönüşüyor:

C++:
Genişlet Daralt Kopyala
std::_snprintf(...)

Fakat _snprintf, std namespace’i içinde olmadığı için:

Kod:
Genişlet Daralt Kopyala
'_snprintf': is not a member of 'std'

hatası oluşuyor.

Çözüm boost’u editlemek değil, bu define’ı kaldırmak.
 
Geri
Üst