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 

static, cout et portabilite

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





PostPosted: Fri Aug 22, 2003 12:57 pm    Post subject: static, cout et portabilite Reply with quote



Puisque certains compilateurs ne construisent pas std::cout
avant mes objets static (pgcc 3.2 par exemple),
comment je fais pour afficher quelque chose a la construction
de mes objets static ?

Je suis oblige d'utiliser printf pour assurer la portabilite ?

Cyril
Back to top
Jean-Marc Bourguet
Guest





PostPosted: Fri Aug 22, 2003 2:08 pm    Post subject: Re: static, cout et portabilite Reply with quote



[email]Cyril.Gruau (AT) cemef (DOT) cma.fr[/email] (Cyril Gruau) writes:

Quote:
Puisque certains compilateurs ne construisent pas std::cout
avant mes objets static (pgcc 3.2 par exemple),
comment je fais pour afficher quelque chose a la construction
de mes objets static ?

Il faut construire une variable statique de type std::ios_base::Init
avant tes variables.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Cyril Gruau
Guest





PostPosted: Fri Aug 22, 2003 3:32 pm    Post subject: Re: static, cout et portabilite Reply with quote



Quote:
Il faut construire une variable statique de type std::ios_base::Init
avant tes variables.

D'accord mais ou ?

J'ai ajoute

static std::ios_base::Init x;

dans le namespace global
ou dans la declaration de ma classe, sans succes.

Cyril

Back to top
Samuel Krempp
Guest





PostPosted: Mon Aug 25, 2003 1:56 pm    Post subject: Re: static, cout et portabilite Reply with quote

le Vendredi 22 Août 2003 17:32, [email]Cyril.Gruau (AT) cemef (DOT) cma.fr[/email] écrivit :

Quote:
Il faut construire une variable statique de type std::ios_base::Init
avant tes variables.

D'accord mais ou ?

J'ai ajoute

static std::ios_base::Init x;

dans le namespace global
ou dans la declaration de ma classe, sans succes.

Mettre les var statiques dans des fonctions pour s'assurer de l'ordre
d'instanciation est une technique expliquée dans le 'Effective C++'.

Dans ton cas, il suffirait d'agir dans le corps des constructeurs de tes
variables statiques qui veulent afficher.
si j'ai bien compris ce que tu veux, tu peux faire comme :

void avant_d_afficher() {
static std::ios_base::Init x;
}

class Toto {
public :
Toto() {
avant_d_afficher();
std::cout << " on intialise un Toto n";
}
};

static Toto toto;


--
Sam
Enlever les mots en trop dans mon e-mail pour répondre

Back to top
Cyril Gruau
Guest





PostPosted: Mon Aug 25, 2003 4:27 pm    Post subject: Re: static, cout et portabilite Reply with quote

Quote:
Mettre les var statiques dans des fonctions pour s'assurer de l'ordre
d'instanciation est une technique expliquée dans le 'Effective C++'.

Dans ton cas, il suffirait d'agir dans le corps des constructeurs de tes
variables statiques qui veulent afficher.
si j'ai bien compris ce que tu veux, tu peux faire comme :

void avant_d_afficher() {
static std::ios_base::Init x;
}

class Toto {
public :
Toto() {
avant_d_afficher();
std::cout << " on intialise un Toto n";
}
};

static Toto toto;

Ca continue de ne pas marche avec pgCC
(cela fonctionne pourtant avec g++ et cl.exe).

Voici mon code reduit a sa plus simple expression :

**********
dans .h :
**********

class MaClasse
{
public:
MaClasse();

private:
// je suis contraint d'utiliser un char * par ma hierarchie
static char * chaine;
static MaClasse exemplaire;
};

*************
dans .cpp :
*************

#include #include "MaClasse.h"

using namespace std;

char * MaClasse::chaine = "blabla";
MaClasse MaClasse::exemplaire = MaClasse() ;

void avant_d_afficher() {
static std::ios_base::Init x;
}

MaClasse::MaClasse()
{
avant_d_afficher();
cout << chaine << endl;
}

**********
resultat :
**********

Memory fault(coredump)

Tandis qu'avec un printf, ca fonctionne


Back to top
Samuel Krempp
Guest





PostPosted: Mon Aug 25, 2003 8:21 pm    Post subject: Re: static, cout et portabilite Reply with quote

le Lundi 25 Août 2003 18:27, [email]Cyril.Gruau (AT) cemef (DOT) cma.fr[/email] écrivit :

Quote:
Ca continue de ne pas marche avec pgCC
(cela fonctionne pourtant avec g++ et cl.exe).

au fait, c'est quoi pgCC ? si il s'obstine à faire planter ton exe, tu peux
essayer diverses choses en esperant eviter le bug.

par exple, au lieu d'avoir
class MaClasse {
[..]
static MaClasse exemplaire;
[..]
}

tu pourrais faire une fction membre statique
static MaClasse& MaClasse::UnExemplaire() {
static MaClasse exemplaire=MaClasse();
return exemplaire;
}

et appeler MaClasse::UnExemplaire() qd tu veux acceder à cette instance
statique.
Je crois me rappeler que la construction de la variable se fera au moment du
premier appel de la fonction UnExemplaire(), donc plus tard qu'avec ta
construction actuelle, et avec un peu de chance à ce moment std::cout sera
déja prêt à fonctionner.


--
Sam
Enlever les mots en trop dans mon e-mail pour répondre

Back to top
Cyril Gruau
Guest





PostPosted: Tue Aug 26, 2003 6:33 am    Post subject: Re: static, cout et portabilite Reply with quote

Quote:
au fait, c'est quoi pgCC ?

Il s'agit du compilateur C++ de Portland Group
(mon code doit malheureusement etre portable sur ce compilateur).


Quote:
si il s'obstine à faire planter ton exe, tu peux
essayer diverses choses en esperant eviter le bug.

par exple, au lieu d'avoir
class MaClasse {
[..]
static MaClasse exemplaire;
[..]
}

tu pourrais faire une fction membre statique
static MaClasse& MaClasse::UnExemplaire() {
static MaClasse exemplaire=MaClasse();
return exemplaire;
}

Effectivement on peut eviter le probleme ainsi.

Mais il n'en reste pas moins que cout est inutilisable
pendant l'instanciation des membres static.

Cyril

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.