Diyelim ki aşağıdaki kod (çok basit).
#include <iostream>
int main() {
std::cout << std::stoi("12");
}
Bu hem g ++ hem de clang üzerinde iyi derler; ancak MSVC'de aşağıdaki hatayla derlenemez:
hata C2039: 'stoi': 'std' üyesi değil
hata C3861: 'stoi': tanımlayıcı bulunamadı
Bunun iki eski derleyicinin bir parçası olarak içerdiği ve ikincisinin içermediği başlığın bir std::stoiparçası olduğunu biliyorum . C ++ standardına göre [res.on.headers]<string><iostream>
Bir C ++ üstbilgisi diğer C ++ üstbilgilerini içerebilir.
Bana göre, temel olarak her üç derleyicinin de doğru olduğunu söylüyor.
Bu sorun, öğrencilerimden biri Teknik Yardım'ın derlenmediğini belirten bir çalışma sunduğunda ortaya çıktı; Elbette gittim ve düzelttim. Ancak, bunun gibi gelecekteki olayları önlemek istiyorum. Peki, hangi başlık dosyalarının dahil edilmesi gerektiğini belirlemenin bir yolu var mı?
Düşünebilmemin tek yolu, her stdişlev çağrısı için uygun bir dahil olmasını sağlamaktır ; ancak binlerce satır uzunluğunda mevcut bir kodunuz varsa, bu arama yapmak sıkıcı olabilir. Derleyiciler arası uyumluluğu sağlamak için daha kolay / daha iyi bir yol var mı?
Üç derleyiciye örnek: https://godbolt.org/z/kJhS6U
std::stoihemen #include <string>mevcut olduğundan da emin olursunuz .
std::stoiişlemek için olduğunu hatırlarsanız, bu eklemek için iyi bir başlık olacağını tahmin edebilirsiniz . Veya size söyleyecek iyi bir referans arayabilirsiniz . Üstbilgi dosyalarını her zaman açıkça eklemenizi öneririm, bu nedenle taşınabilir olmayan uygulamaya özel davranışa güvenmeniz gerekmez.<string>