 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Christophe Bondoin Guest
|
Posted: Tue Oct 10, 2006 9:45 pm Post subject: tableau 2d statique |
|
|
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
|
Posted: Tue Oct 10, 2006 10:40 pm Post subject: Re: tableau 2d statique |
|
|
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
|
Posted: Wed Oct 11, 2006 12:47 am Post subject: Re: tableau 2d statique |
|
|
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
|
Posted: Wed Oct 11, 2006 2:10 am Post subject: Re: tableau 2d statique |
|
|
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
|
Posted: Wed Oct 11, 2006 9:11 am Post subject: Re: tableau 2d statique |
|
|
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 |
|
 |
|
|
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
|
|