Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么boost::locale会抛出std::bad_cast?_C++_Exception_Boost_Locale - Fatal编程技术网

C++ 为什么boost::locale会抛出std::bad_cast?

C++ 为什么boost::locale会抛出std::bad_cast?,c++,exception,boost,locale,C++,Exception,Boost,Locale,我试图理解如何使用boost::locale来比较忽略大小写和变量的字符串。我直接尝试了Boost文档中的一段代码: boost::locale::generator; std::locale vLocale=gen(“”); std::wstring a=L“立面”,b=L“立面”; //下面将抛出坏的\u类型 bool eq=std::使用切面(vLocale)。比较( boost::locale::collator_base::secondary, A. B ) == 0; 如果(eq)

我试图理解如何使用boost::locale来比较忽略大小写和变量的字符串。我直接尝试了Boost文档中的一段代码:

boost::locale::generator;
std::locale vLocale=gen(“”);
std::wstring a=L“立面”,b=L“立面”;
//下面将抛出坏的\u类型
bool eq=std::使用切面(vLocale)。比较(
boost::locale::collator_base::secondary,
A.
B
) == 0;

如果(eq)std::cout似乎您使用了不正确的区域设置对象。首先,您应该使用全局语言环境,然后(如果您想使用
std::cout
)将语言环境嵌入到流中。大概是这样的:

boost::locale::generator gen;
std::locale loc = gen("");
std::locale::global(loc);

但是,在您的示例中,如果您没有使用
std::cout
,只需设置全局区域设置,就可以准备好所需的方面。

作为一个提示,
bad\u cast
异常表示给定的
locale
没有请求的
facet
。不需要
std::use\u facet(l)
设置特定的全局
std::locale
!似乎locale对象不包含所需的方面。似乎我的locale没有collator方面。但我用生成器创建了它,我希望它包含一个(另外,文本分割需要ICU,请确保您使用ICU支持编译boost,这可以通过如下自制软件轻松完成:
brew安装boost--with-icu4c--cxx11
,然后使用
-I/usr/local/include
编译,并链接到
-L/usr/local/lib-lboost\u locale-mt
boost::locale::generator gen;
std::locale loc = gen("");
std::locale::global(loc);