C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

tableau 2d statique

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Christophe Bondoin
Guest





PostPosted: Tue Oct 10, 2006 9:45 pm    Post subject: tableau 2d statique Reply with quote



Bonjour,

j'aimerais utiliser un tableau statique de chaines de caratère.
J'ai essayé :

class Truc {
public:
static const char** tab;
};

dans le .h, et :

const char** Truc::tab = { "a", "b" };

dans le .cpp, mais ça ne compile pas :
error: initializer for scalar variable requires one element

J'ai essayé de déclaré comme ça :
const char* tab[2];

ça ne marche pas, et d'initialiser comme ça :
const char* Truc::tab[0] = "a";

ça ne marche pas non plus. Tout ce que je veux c'est un tableau statique,
accessible depuis l'extérieur et initialisé dès le début de l'appli.

Merci si vous avez des solutions
Back to top
Falk Tannhäuser
Guest





PostPosted: Tue Oct 10, 2006 10:40 pm    Post subject: Re: tableau 2d statique Reply with quote



Christophe Bondoin wrote:
Quote:
class Truc {
public:
static const char** tab;
};

dans le .h, et :

const char** Truc::tab = { "a", "b" };

dans le .cpp, mais ça ne compile pas :
error: initializer for scalar variable requires one element

Normal - on ne peut pas initialiser un pointeur avec deux valeurs...

Quote:
J'ai essayé de déclaré comme ça :
const char* tab[2];

ça ne marche pas, et d'initialiser comme ça :
const char* Truc::tab[0] = "a";

C'est curieux ! Ceci doit fonctionner (tableau d'une dimension
comportant des pointeurs constants sur des chaînes constantes) :

// dans le .h
class Truc
{
public:
static char const* const tab[2];
};

// dans le .cpp
char const* const Truc::tab[] = { "a", "b" };

Voici une autre façon de faire, avec un tableau de 2 dimensions :

class Truc
{
public:
static char const tab[2][N];
};

char const Truc::tab[2][N] = { "a", "b" };

ou 'N' est la taille maximale de tes chaînes de caractères (comprenant
le '\0' à la fin).

Falk
Back to top
Sylvain
Guest





PostPosted: Wed Oct 11, 2006 12:47 am    Post subject: Re: tableau 2d statique Reply with quote



Falk Tannhäuser wrote on 10/10/2006 19:40:
Quote:

J'ai essayé de déclaré comme ça :
const char* tab[2];

sans le 'static' et hors de la classe 'Truc' ??

Quote:
ça ne marche pas, et d'initialiser comme ça :
const char* Truc::tab[0] = "a";

C'est curieux ! Ceci doit fonctionner [...]

si une des 2 erreurs ci-avant est présente, cela explique pourquoi;
sinon c'est très "curieux" (voire une erreur du compilo).

Sylvain.
Back to top
Christophe Bondoin
Guest





PostPosted: Wed Oct 11, 2006 2:10 am    Post subject: Re: tableau 2d statique Reply with quote

Hum, ça marche avec :

static const char* tab[2];

dans le .h, et :

const char* Truc::tab[] = { "A", "B" };

dans le .cpp ...

ou je suis bete (c'est tout à fait possible), ou c'est la seule combinaison
que je n'ai pas testé ...

En tout cas merci.
Back to top
kanze
Guest





PostPosted: Wed Oct 11, 2006 9:11 am    Post subject: Re: tableau 2d statique Reply with quote

Falk Tannhäuser wrote:
Quote:
Christophe Bondoin wrote:
class Truc {
public:
static const char** tab;
};

dans le .h, et :

const char** Truc::tab = { "a", "b" };

dans le .cpp, mais ça ne compile pas :
error: initializer for scalar variable requires one element

Normal - on ne peut pas initialiser un pointeur avec deux valeurs...

J'ai essayé de déclaré comme ça :
const char* tab[2];

ça ne marche pas, et d'initialiser comme ça :
const char* Truc::tab[0] = "a";

C'est curieux ! Ceci doit fonctionner (tableau d'une dimension
comportant des pointeurs constants sur des chaînes
constantes) :

Il y a au moins deux erreurs : on ne peut pas déclarer un
tableau statique de taille zéro -- il faut au moins un élément,
et un tableau est un aggloméré, dont l'initialisateur exige des
{...}.

const char* /* const ? */ Truc::tab[] = { "A", "B" } ;

doit marcher.

Je sais que le posteur original ne l'avait pas, mais s'il veut
un tableau const, il lui faut aussi le deuxième const, que j'ai
mis en commentaires. (Et s'il ne veut pas que le tableau soit
const, je conseillerais vivement un tableau de std::string,
plutôt que des pointeurs.)

Quote:
// dans le .h
class Truc
{
public:
static char const* const tab[2];
};

// dans le .cpp
char const* const Truc::tab[] = { "a", "b" };

Voici une autre façon de faire, avec un tableau de 2 dimensions :

class Truc
{
public:
static char const tab[2][N];
};

char const Truc::tab[2][N] = { "a", "b" };

ou 'N' est la taille maximale de tes chaînes de caractères
(comprenant le '\0' à la fin).

C'est un véritable tableau à deux dimensions, et non un tableau
de pointeurs. Mais je ne sais pas si c'est un si bonne idée si
ce qu'il veut réelement est un tableau de chaînes.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.