Boost 1.81.0 ve Visual Studio 2022 " '_snprintf': is not a member of 'std' " hatası çözümü

Kaptan Yosun

Co-Co Admin
Moderatör
Geliştirici
Yardımsever Üye
Usta Üye
Mesaj
1.443
Çözümler
53
Beğeni
2.270
Puan
1.839
Ticaret Puanı
0
Yeni bir sıfırdan altyapı derlemeye çalışırken bu sorunla karşılaştım. Gamelib'i build ederken böyle bir hata veriyor:

Hata:
Genişlet Daralt Kopyala
1>C:\Users\Administrator\Desktop\ClientSource\extern\include\boost\assert\source_location.hpp(97,9): error C2039: '_snprintf': is not a member of 'std'
1>C:\Users\Administrator\Desktop\ClientSource\extern\include\boost\move\detail\iterator_traits.hpp(63,1): message : see declaration of 'std'
1>C:\Users\Administrator\Desktop\ClientSource\extern\include\boost\assert\source_location.hpp(104,13): error C2039: '_snprintf': is not a member of 'std'
1>C:\Users\Administrator\Desktop\ClientSource\extern\include\boost\move\detail\iterator_traits.hpp(63,1): message : see declaration of 'std'

Google'da aratınca birisi "VS2015 ve üstü için snprintf define'ına ihtiyaç yok, VS'in kendi snprintf'i var" yazmış.( ) Bu yüzden ClientSource\extern\include\boost\assert\source_location.hpp içindeki hata veren satırların kaynaklandığı;

Ara:
Genişlet Daralt Kopyala
#if ( defined(_MSC_VER) && _MSC_VER < 1900 ) || ( defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) )
# define BOOST_ASSERT_SNPRINTF(buffer, format, arg) std::sprintf(buffer, format, arg)
#else
# define BOOST_ASSERT_SNPRINTF(buffer, format, arg) std::snprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), format, arg)
#endif

Kod bloğunu

Değiştir:
Genişlet Daralt Kopyala
#if ( defined(_MSC_VER) && _MSC_VER < 1900 ) || ( defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) )
# define BOOST_ASSERT_SNPRINTF(buffer, format, arg) sprintf(buffer, format, arg)
#else
# define BOOST_ASSERT_SNPRINTF(buffer, format, arg) snprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), format, arg)
#endif

olarak değiştirdim ve gamelib build verdi. Ben koddan anlamıyorum. Bilgili birisi bu çözümü onaylayabilir mi? Bu yanlış bir yaklaşım mı?
 
Sorunsuz build aldıysa sorun yok demektir. Ve ayrıca evet doğru, 1900 = VS2015'i temsil eder.
sprintf ve snprintf, 2015 üstü VS'lerin(SDK) kendi içinde mevcut. (stdio.h)
 
Uyarı: Bu konu açıldığından bu yana baya zaman geçmiş.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.
Geri
Üst