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 

constante static public

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





PostPosted: Thu Jan 15, 2004 9:51 pm    Post subject: constante static public Reply with quote



salut,


j'ai dans une classe :

static const unsigned int etat_inconnu = 3;


et dans mon cpp :

unsigned int
Automate::operator[](unsigned int indice) const
{
return (indice < nb_etat)? etats[indice]:etat_inconnu;
}

là j'ai un undefined reference to 'etat_inconnu' à l'édition de
liens...

j'ai trouvé la solution, en me disant que ct peut-etre le ':' qui
génait... et j'ai fait

if(indice < nb_etat)
return etats[indice];
else
return etat_inconnu;


et là plus de pb..


seulement si c la solution, je ne vois pas trop l'explication


qui peux me la donner ?

merci

--
Nico,
http://astrosurf.com/nicoastro
messenger : [email]nicolas_aunai (AT) hotmail (DOT) com[/email]

Back to top
Horst Kraemer
Guest





PostPosted: Fri Jan 16, 2004 1:01 am    Post subject: Re: constante static public Reply with quote



On Thu, 15 Jan 2004 22:51:24 +0100, Nicolas Aunai
<nicolas.aunai (AT) free (DOT) fr> wrote:

Quote:
salut,


j'ai dans une classe :

static const unsigned int etat_inconnu = 3;


et dans mon cpp :

unsigned int
Automate::operator[](unsigned int indice) const
{
return (indice < nb_etat)? etats[indice]:etat_inconnu;
}

là j'ai un undefined reference to 'etat_inconnu' à l'édition de
liens...

parce qu'il manque une *definition*

const unsigned int Automate::etat_inconnu; // sans =3 !

dans ton .cpp.


Quote:
j'ai trouvé la solution, en me disant que ct peut-etre le ':' qui
génait... et j'ai fait

if(indice < nb_etat)
return etats[indice];
else
return etat_inconnu;

et là plus de pb..

seulement si c la solution, je ne vois pas trop l'explication

Il parait que ton compilateur est rouillé...

--
Horst


Back to top
Nicolas Aunai
Guest





PostPosted: Fri Jan 16, 2004 6:10 am    Post subject: Re: constante static public Reply with quote



Horst Kraemer a pensé très fort :


Quote:
parce qu'il manque une *definition*

const unsigned int Automate::etat_inconnu; // sans =3 !

dans ton .cpp.


meuh nan ! j'utilise cette même constante 2 lignes plus loin sans
probleme !! et si je chge le code ça marche !


Quote:
seulement si c la solution, je ne vois pas trop l'explication

Il parait que ton compilateur est rouillé...


quoi ?

--
Nico,
http://astrosurf.com/nicoastro
messenger : [email]nicolas_aunai (AT) hotmail (DOT) com[/email]


Back to top
Michel Michaud
Guest





PostPosted: Fri Jan 16, 2004 1:15 pm    Post subject: Re: constante static public Reply with quote

Dans news:mesnews.7d5b7d41.c4235f07.3.1437 (AT) free (DOT) fr, Nicolas
Aunai <nicolas.aunai (AT) free (DOT) fr> a écrit :
Quote:
j'ai dans une classe :

static const unsigned int etat_inconnu = 3;

Avec cette construction, le compilateur¹ est libre de ne pas
exiger la définition de la variable. Ce n'est quand même qu'une
simple déclaration et il faudrait la définition.

Quote:
et dans mon cpp :

unsigned int
Automate::operator[](unsigned int indice) const
{
return (indice < nb_etat)? etats[indice]:etat_inconnu;
}

là j'ai un undefined reference to 'etat_inconnu' à l'édition de
liens...

Alors c'est normal, il te manque la définition...

Quote:
j'ai trouvé la solution, en me disant que ct peut-etre le ':' qui
génait... et j'ai fait

if(indice < nb_etat)
return etats[indice];
else
return etat_inconnu;


et là plus de pb..

C'est un « hasard », mais là, il n'exige pas la définition, comme
c'est permis...

Quote:
seulement si c la solution, je ne vois pas trop l'explication

L'explication est que le compilateur a le droit d'exiger ou non
la définition. Ceci dit, c'est effectivement curieux que l'on
voit la différence dans ce cas. Il faudrait un expert de la
compilation pour comprendre la différence, mais ce que ça dit,
c'est que l'histoire des static const n'est pas aussi directe
que l'on peut penser.

¹ Je dis compilateur ici, mais en fait, c'est l'ensemble
compilateur/éditeur de liens...
--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Back to top
Vincent Lascaux
Guest





PostPosted: Fri Jan 16, 2004 9:51 pm    Post subject: Re: constante static public Reply with quote

Quote:
static const unsigned int etat_inconnu = 3;

Avec cette construction, le compilateur¹ est libre de ne pas
exiger la définition de la variable. Ce n'est quand même qu'une
simple déclaration et il faudrait la définition.

Tu veux dire qu'un programme qui ne donne pas la définition de la variable
pourrait etre considéré (a raison) juste par un compilateur et faux par un
autre ?
Je pensais que la norme devait spécifier ce qu'etait du code C++ et ce qui
n'en est pas. Mais en réalité on ne peut pas dire si du code est C++ ou non
sans savoir de quel compilateur on parle ?!

--
Vincent



Back to top
Michel Michaud
Guest





PostPosted: Sat Jan 17, 2004 5:42 am    Post subject: Re: constante static public Reply with quote

Dans news:40085ce7$0$19270$626a54ce (AT) news (DOT) free.fr, Vincent
Lascaux <nospam (AT) nospam (DOT) org> a écrit :
Quote:
static const unsigned int etat_inconnu = 3;

Avec cette construction, le compilateur¹ est libre de ne pas
exiger la définition de la variable. Ce n'est quand même qu'une
simple déclaration et il faudrait la définition.

Tu veux dire qu'un programme qui ne donne pas la définition de la
variable pourrait etre considéré (a raison) juste par un
compilateur et faux par un autre ?

« In that case [static const int ou enum avec initialisation],
the member can appear in integral constant expressions within
its scope. The member shall still be defined in a namespace
scope if it is used in the program [...] »

Notez le « used »... J'y comprends qu'il faut la définition
seulement si le compilateur doit prendre l'adresse ou utiliser
la variable en tant que telle, plutôt que simplement utiliser la
valeur donnée à l'initialisation en tant que valeur constante.
Mais c'est mon interprétation...

Quote:
Je pensais que la norme devait spécifier ce qu'etait du code C++ et
ce qui n'en est pas. Mais en réalité on ne peut pas dire si du code
est C++ ou non sans savoir de quel compilateur on parle ?!

Pas vraiment, je crois finalement que les deux versions du code
original sont peut-être correctes. L'interprétation de la norme,
en particulier ce que signifie « used », est un peu difficile...

Le problème vient peut-être des lvalue vs rvalue (un lvalue, dans
le cas du ?:, serait une utilisation au sens de « used »), mais ça
prendrait un expert (Gabriel ? ... à l'aide !) pour confirmer.

En plus, c'est une règle nouvelle de la norme, comme le fait de
pouvoir donner l'initialisation dans la classe. Peut-être que
certains compilateurs ne font pas les choses correctement.

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


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.