C++ ICU DateFormatSymbols::getMonths()

C++ ICU DateFormatSymbols::getMonths(),c++,icu,C++,Icu,我正在做一个项目,利用ICU的图书馆处理各种语言的日期信息。我在函数中使用以下代码: UErrorCode uec; Locale locale(language); // e.g with language = "en" DateFormatSymbols symbs( locale, uec ); int32_t count; auto months = symbs.getMonths(count); for( int32_t i = 0 ; i < count; ++i ){ /

我正在做一个项目,利用ICU的图书馆处理各种语言的日期信息。我在函数中使用以下代码:

UErrorCode uec;
Locale locale(language); // e.g with language = "en"
DateFormatSymbols symbs( locale, uec );
int32_t count;
auto months = symbs.getMonths(count);
for( int32_t i = 0 ; i < count; ++i ){
  // some code handling month names, no ICU;
}
// more code that does not use ICU
UErrorCode-uec;
语言环境(语言);//e、 g带language=“en”
日期格式符号符号(语言环境,uec);
int32_t计数;
自动月份=symbs.getMonths(计数);
对于(int32_t i=0;i
count
的值应该通过
getMonths()
方法设置为获得的月数,例如,当语言为英语时为12

问题是,当我多次调用同一个函数时,有时
count
是12,有时是0,这似乎是不可预测的。更糟糕的是,同一代码在我同事的电脑上的行为不同,当我添加与
symbs
无关的代码行时,会改变行为,例如,在函数中的某个位置创建
UnicodeString


我怀疑
DateFormatSymbols
的初始化或区域设置出了问题,但就我而言,我不知道是什么。有人能告诉我为什么会发生这种情况,以及可能如何修复它,以便我总是能在
计数中获得预期的月数吗?

您需要初始化
uec

UErrorCode-uec;

然后你需要检查它的结果

DateFormatSymbols符号(语言环境,uec);
如果(U_故障(uec)){
…//处理错误
}


参见

您需要初始化
uec

UErrorCode-uec;

然后你需要检查它的结果

DateFormatSymbols符号(语言环境,uec);
如果(U_故障(uec)){
…//处理错误
}