[C++] problème de namespace

Hello la zone,

J’ai un gros soucis dans le cadre de mon travail: je suis en train de développer un script PERL qui passe dans des fichiers C++ générés automatiquement (par un compilatreur d’IDL) et qui les transforme a plusieurs niveau.

Et je suis arrivé a un os. A la sortie de mon script PERL j’ai la ligne suivante:
CORBA::Boolean ::_sk_EventReporting::_sk_EventReporter::_is_a (
  const char* value
  ACE_ENV_ARG_DECL_NOT_USED
  )
ça passe pas a la compil, alors que la ligne suivante:
CORBA::Boolean _sk_EventReporting::_sk_EventReporter::_is_a (
  const char* value
  ACE_ENV_ARG_DECL_NOT_USED
  )
(Seule différence les “::” supprimés juste après le Boolean) : Ca passe!

En sachant que “_sk_EventReporting” est un namespace global je ne comprend pas pourquoi ça ne passe pas…

Quelqu’un a une idée?

Je ne peux, bien sûr pas supprimer bêtement les “::” car c’est un fichier généré automatiquement…

Bon alors …

Type_de_la_variable_retourné   LACLASSE::LAFONCTION(…)

Aprés le namespace tu peux faire un using namespace COBRA;

C’est plus propre mais je dirai COBRA::Type_de_la_variable_retourné   LACLASSE::LAFONCTION(…)

Va marcher

parce que avec les :: enplus ca a plus de sens …

Koubiak

Le ‘::’ est effectivement en trop. Tu veux inclure ta méthode au namespace _sk_EventReporting ? dans ce cas il faut écrire :

namespace _sk_EventReporting
{

CORBA::Boolean _sk_EventReporter::_is_a (…)
  {
  const char* value
  ACE_ENV_ARG_DECL_NOT_USED
  )

}
ou bien comme dans ton second exemple.

o/ o/o/ o/o/ o/
o/ o/o/ o/o/ o/
o/ o/o/ o/o/ o/

JOIE dans la cafzone Moktar et moi on est d’accord

Champagne ?

Koubiak qui charie (varie ?)

Merci pour vos réponses…

je suis d’accord avec vous (décidemment tout le monde est d’accord dans ce thread), le problème c’est que c’est du code généré par un script Perl, et que dans pleins de cas le “::” initial est nécessaire pour montrer qu’on part du namespace global, sinon ça me fait des erreurs de compil (ambiguous quelque chose) car j’ai un namespace et une classe qui ont le même nom… du coup si je met pas le :: le compilo ne sait pas si je veux la classe ou le namespace…

Donc j’avais rajouté systématiquement ce :: au début. ça marche quasi partout mais pas dans le cas que je vous ai exposé…

Mais bon je pense avoir trouvé un workaround en enlevant un “using namespace” dans un header qui foutait un peu le bronx partout…

merci quand même.