C++ UnicodeString
Résolu
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!
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
C'est normal les strings unicode s'initialisent différement, il faut mettre un L devant les guillemets ouvrants.
Bonne chance
Bonne chance
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"},
??
Ensuite, tu veux dire qu'il faut initialiser comme ça :
{L"phrase 1 anglais" ,L"phrase 2 anglais"},
??
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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!
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!