2

Boost for C++ を使い始めようとしています。でコンパイルする小さなプログラムを次に示しますg++ -Wall test.cpp /usr/local/Cellar/boost/1.55.0/lib/libboost_locale-mt.a

ただし、実行すると、次のエラーが表示されます。 libc++abi.dylib: terminating with uncaught exception of type std::bad_cast: std::bad_cast Abort trap: 6

#include <string>
#include <iostream>
#include <boost/locale.hpp>

int main(void) {
    char test[] = "Variété";
    boost::locale::to_upper(test);
    std::cout << test << std::endl;
    return 0;
}

ここでの理由は何でしょうか?ありがとう!

私は Mac OSX Mavericks を使用しています。

4

1 に答える 1

5

ドキュメントによると:

http://www.boost.org/doc/libs/1_48_0/libs/locale/doc/html/group__convert.html#ga7889a57e1bc1059fbb107db0781d0b6d

    std::basic_string<CharType> boost::locale::to_lower(CharType const *str,
                                   std::locale const &loc = std::locale())

ロケール loc に従って、NUL で終了する文字列 str を小文字に変換します

注: loc にコンバーター ファセットがインストールされていない場合、std::bad_cast をスローします。

したがって、これは私のマシンの問題を修正します。

#include <string>
#include <iostream>
#include <boost/locale.hpp>

int main(void) {
    std::string test = "Variété";
    std::locale loc = boost::locale::generator().generate("en_US.UTF-8");
    std::string test_u = boost::locale::to_upper(test, loc);
    std::cout << test << " -> " << test_u << std::endl;
    return 0;
}

出力:

Variété -> VARIÉTÉ
于 2013-11-13T17:53:04.997 に答える