C++ UnicodeString

Résolu
manulenicois Messages postés 6 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous.
Voila mon problème :

J'utilise CodeGear RAD Studio sur Vista (C++).

Pour programmer proprement, j'essaie d'utiliser des classes pour la gestion des langues.

Langues.h :
#include <Classes.hpp>
class Langues {
private:
unsigned short int lang; //id de langue
UnicodeString TextIntro[20][2]; //il me faut 2 phrase pour chaque langue

public:
Langues(unsigned short int lang);
virtual ~Langues();
unsigned short int getLang();
void setLang(unsigned short int lang);

UnicodeString getTextIntro(unsigned short int lang, unsigned short int position);//obtenir l'une des 2 phrases dans la langue choisie
};

Langues.cpp
//---------------------------------------------------------------------------
#pragma hdrstop

#include "Languages.h"
//---------------------------------------------------------------------------
Langues::Langues(unsigned short int lang) {
//comme type, je choisi soit :
char* ier[20][2] = {//juste??
//soit
UnicodeString ier[20][2] = {//faux???

{"phrase 1 anglais" ,"phrase 2 anglais"},
{"phrase 1 français","phrase 2 français"}
};

setLang(lang);
}
//---------------------------------------------------------------------------
unsigned short int Langues::getLang() {
return this->lang;
}
//---------------------------------------------------------------------------
void Langues::setLang(unsigned short int lang) {
this->lang = lang;
}
//---------------------------------------------------------------------------
UnicodeString Langues::getTextIntro(unsigned short int lang, unsigned short int position) {
return TextIntro[lang][position];
}
//---------------------------------------------------------------------------
#pragma package(smart_init)

Ce qui es bizarre, c'est qu'avec le char*, il n'y a pas de problème.
Avec le UnicodeString, erreur :
[BCC32 Erreur fatale] Langues.cpp(11): F1004 Erreur du compilateur interne at 0x688c652 with base 0x67e0000

Quelqu'un a une explication ?
Merci d'avance!

6 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    C'est normal les strings unicode s'initialisent différement, il faut mettre un L devant les guillemets ouvrants.

    Bonne chance
    1
  2. manulenicois Messages postés 6 Statut Membre
     
    D'abord, merci pour ta réponse rapide.

    Ensuite, tu veux dire qu'il faut initialiser comme ça :

    {L"phrase 1 anglais" ,L"phrase 2 anglais"},

    ??
    0
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Oui.
    0
  4. manulenicois Messages postés 6 Statut Membre
     
    OK, j'essaie ce soir et je de dis le résultat.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. manulenicois Messages postés 6 Statut Membre
     
    Avant tout, merci mamiemando.

    J'ai essayé d'abord avec les L, rien a changé.

    Puis, j'ai testé des codes du genre
    UnicodeString texte = L"str";
    Puis UnicodeString texte[2] = {L"str",L"str"};

    Les 2 marchent.

    En fait, je me suis rendu compte que c'était un problème de taille de tableau :
    J'ai réservé plus de lignes qu'il n'en était nécessaire, ce qui a provoqué une erreur ... :-/

    En réservant pile la taille qu'il me fallait, tout marchait bien!
    0
  7. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Ok :-)
    0