2008-09-07 21 views
25

İnsanların C++ hata mesajlarının şablonlar açısından oldukça korkunç olduğunu söyledikleri insanların ne anlama geldiğini anlamaya başlıyorum. Onun prototipine uymayan bir fonksiyon kadar basit şeyler için korkunç uzun hatalar gördüm.C++ şablonunun hata mesajlarının deşifre edilmesi

Bu hataları çözmek için herhangi bir hile var mı?

DÜZENLEME: Hem gcc hem de MSVC kullanıyorum. İkisi de oldukça berbat görünüyor.

cevap

3

Bazı derleyiciler diğerlerinden daha iyi mesajlar verir. Hangi derleyiciyi kullanıyorsunuz? Bunu söyledikten sonra, hepsi çok kötü. C++ 0X bu sorunun çoğunu çözecektir (bkz. concepts), ancak standart 2009'a kadar yayınlanmayacak ve geniş destek muhtemelen bundan daha sonra olacaktır :-(

+1

-1 Hala çözülemeyen vardır; belki de daha önce olduğu gibi kabul edilemez değil, ama hala korkunç! –

+0

Evet, şu an biriyle mücadele ediyorum. Görsel olarak ayrıştırmak çok zor! –

+2

Kavramlar bunu C++ 11'e dönüştürmedi. –

8

Eminim cehennemde Küçük hatalar sayfalara ve okunamayan önemsiz sayfalara yayılır. Genellikle sabah erkenden, kahveden önce .((

Tek tavsiyem derin bir nefes almak, en baştan başlamak ve önemli bilgi parçalarını denemek ve ayrıştırmaktır. (Biliyorum, daha kolay söyledi, değil mi?)

2

En azından Visual Studio'da, Hata Listesi yerine Çıktı Oluşturma penceresinde verilen daha fazla bilgi var Hatada bir şablon hatası oluştu. Liste durumu, "Dönüştürülemiyor Fo <int>, Foo <int> için ". Çıktı penceresinde, asıl sorunun ne olduğunu çözmemde bana yardımcı olan bazı hatalar vardı.

4

@nsanders, STLFilt'un iyi bir çözüm olduğunu belirtti. Bir evde yetiştirilen STLFilt (Perl'i kurma zorluğuna gitmek istemediğinizde), hata mesajını bir editöre kopyalamak ve (daha) yönetilebilir hale gelinceye kadar hatanın bölümlerini değiştirmeye başlamaktır.

örn. Yerine

:

std::basic_string<char,std::char_traits<char>,std::allocator<char>> 

ile:

s/std::basic_string<char,std::char_traits<char>,std::allocator<char>>/string/g 

az geeky açısından bunun anlamı

string 
+0

Bu, göründüğünden daha kullanışlı. İnsan beyninin bilgi-aşırı yüklenme sınırları hakkında utanmamış hissetme - ve orada insanlar arasında daha az varyasyon var. Hepimiz aynı sayıdaki desenleri aynı anda eşleştirebiliriz - bu sayı yavaş yavaş büyük desenleri eşleştirmeyi öğrenmektir. – breakpoint