2016-07-05 18 views
1

Ich arbeite an einem Projekt, das ICU-Bibliotheken verwendet, um Datumsinformationen in verschiedenen Sprachen zu verarbeiten. Ich verwende den folgenden Code in einer Funktion:ICU DateFormatSymbols :: getMonths()

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 

Der Wert von count sollte, erhalten durch das Verfahren getMonths() als die Anzahl von Monaten eingestellt werden, z.B. 12 wenn die Sprache Englisch ist.

Das Problem ist, wenn ich die gleiche Funktion mehrmals aufrufen, manchmal count ist 12 und manchmal ist es 0, scheinbar unvorhersehbar. Was schlimmer ist, derselbe Code verhält sich auf den PCs meiner Kollegen anders und ändert das Verhalten, wenn ich Codezeilen hinzufüge, die nichts mit symbs zu tun haben, wie zum Beispiel das Erstellen eines UnicodeString irgendwo innerhalb der Funktion.

Ich vermute, dass etwas mit der Initialisierung von DateFormatSymbols oder dem Gebietsschema aus ist, aber für das Leben von mir kann ich nicht herausfinden, was. Kann mir bitte jemand sagen, warum das passiert und wie ich es beheben kann, damit ich immer die erwartete Anzahl von Monaten in count bekomme?

Antwort

0

müssen Sie uec initialisieren:

UErrorCode uec;

und dann müssen Sie das Ergebnis

DateFormatSymbols symbs(locale, uec); if (U_FAILURE(uec)) { … // handle error …  }

sehen error handling

überprüfen