boost :: dizeden char istisnasına lexical_cast

Ben boost :: lexical_cast kullanarak yeni ve onun iç içe en az anlayış var. Aşağıdaki oyuncuları yapmaya çalışıyorum:

string someString = boost::lexical_cast(sourceString);

Ancak, yükseltme şu kodun şöyledir:

[İstisna]: hatalı sözlü yayın: kaynak türü değeri hedef olarak yorumlanamadı

Kaynak bir dizgidir, ancak her zaman sadece 1 karakter uzunluğunda olacaktır.

Birisi açıklayabilir mi lütfen?

Teşekkürler.

1
@ set - üzgünüm bu kısmı düzgün yazmamıştım, bunu bir char olarak ilan etmeyi kastettim. Bunu yapabilirdim, ancak güçlendirmenin neden doğru bir şekilde dönüştürülemediğini anlamak isterim. Teşekkürler
katma yazar czchlong, kaynak
Ya da belki char c = sourceString [0]; ?
katma yazar Mike Seymour, kaynak
Ayrıca, lexical_cast char sonucunu bir dizeye dönüştüremediğinizden, bu işlem derlenmez. Bunu düzelttikten sonra, sourceString kodu tek bir karakter içerdiği sürece çalışır .
katma yazar Mike Seymour, kaynak
Bunun yerine char c = * (sourceString.c_str ()); gibi bir şey yapmanın bir nedeni var mıydı? Ve neden bir dizgeyi char'a çeviriyorsun ve bir dizeye mi koyuyorsun?
katma yazar Seth Carnegie, kaynak
@MikeSeymour ya da bunu yapabilirsin ...
katma yazar Seth Carnegie, kaynak
@Mike ne dedi; string , char alan bir kurucu içermez. Muhtemelen string in someString (boost :: lexical_cast (sourceString), 1); yapabilir ve çalışmasını sağlayabilirsiniz, ancak bu gerçekten uzun bir yoldur . char str = otherstr [0] yapmadan çok daha iyisin.
katma yazar Seth Carnegie, kaynak

1 cevap

When I test it (after fixing the invalid conversion from char to string), the lexical cast succeeds as long as sourceString contains a single character. Here are the test results.

Gerçek kodunuz çalışmıyorsa, lütfen daha fazlasını gönderin; tercihen, hatayı gösteren bir çalıştırılabilir programdır.

4
katma
Cevap için teşekkürler. Bir vektörüne sahibim ve x dizilimindeki dizginin sadece bir karakter olacağını biliyorum, bu yüzden asıl olarak aşağıdakileri yapıyorum: char someChar = lexical_cast (jetonlar [x]); hatayı bu atıyor. Üzgünüm, bunu daha önce göndermiş olmalı. Teşekkürler.
katma yazar czchlong, kaynak
evet Mike haklısın, benim varsayım yanlıştı. Teşekkürler!
katma yazar czchlong, kaynak
Belki de varsayımlarınızı kontrol etmelisiniz; ifadesini (jeton [x] .length() == 1); dökümden önce bildiğiniz şeyin gerçekte olup bitenlerden emin olmasını sağlayın.
katma yazar Mike Seymour, kaynak