Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1445 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  compilation de Gcc3.2 a Gcc3.4

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

compilation de Gcc3.2 a Gcc3.4

n°2203611
fred313813
Posté le 20-09-2013 à 13:46:28  profilanswer
 

Bonjour,
 
petite question : je suis en train de recompiler une librairie pour un passage de rhel3 a rhel4.
Bien sur ceci implique un changement de gcc également (depuis 3.2 vers 3.4).
L'ensemble de la librairie se compile bien si ce n'est une petite portion de code :
 
typedef MyClass::OnChange <MyInsideClass> OnChange;
 
friend class OnChange;

 
le compilateur me sort un  
error : using typedef-name 'MyInsideClass::OnChange' after 'class'
 
Il s'agit d'un problème de déclaration de cette class friend mais je n'arrive pas a le résoudre.
 
Merci pour votre aide

mood
Publicité
Posté le 20-09-2013 à 13:46:28  profilanswer
 

n°2203619
theshockwa​ve
I work at a firm named Koslow
Posté le 20-09-2013 à 14:41:31  profilanswer
 

Bienvenue dans la préhistoire ...
 
Pour ton problème, ca ressemble à quoi, sur un exemple simple ?
 

Code :
  1. struct A
  2. {
  3.   struct Nested {};
  4. };
  5. struct B
  6. {
  7.   typedef A::Nested Nested;
  8.   friend struct Nested;
  9. };


 
C'est quelque chose comme ca ?


---------------
last.fm
n°2203620
fred313813
Posté le 20-09-2013 à 14:47:15  profilanswer
 

oui tout a fait.

n°2203624
theshockwa​ve
I work at a firm named Koslow
Posté le 20-09-2013 à 15:03:33  profilanswer
 

Je ne sais pas ce que dit le standard à ce sujet, mais mon GCC 4.5 me dit pareil.
Tu ne peux pas mettre simplement ca :

Code :
  1. struct A
  2. {
  3.   struct Nested {};
  4. };
  5. struct B
  6. {
  7.   typedef A::Nested Nested;
  8.   friend struct A::Nested;
  9. };


 
Tu gardes ton typedef, mais seulement pour la déclaration de friend, tu continues à référencer explicitement la classe.


---------------
last.fm
n°2203626
fred313813
Posté le 20-09-2013 à 15:13:37  profilanswer
 

mais a ce moment la Nested n'appartient qu'à A, non ?
Ou bien, le typedef defini la structure de cette class B et le friend lie cette Nested de B a la Nested de A.
Desole, je suis loin d'etre un cador en C++....

n°2203631
fred313813
Posté le 20-09-2013 à 15:28:36  profilanswer
 

ca a l'air de compiler, par contre je suis obligé de rajouter la class B dans le friend :

Code :
  1. struct A
  2. {
  3.   struct Nested {};
  4. };
  5. struct B
  6. {
  7.   typedef A::Nested Nested;
  8.   friend struct A::Nested<B>;
  9. };


 
est ce normal ?

n°2203632
theshockwa​ve
I work at a firm named Koslow
Posté le 20-09-2013 à 15:29:34  profilanswer
 

fred313813 a écrit :

mais a ce moment la Nested n'appartient qu'à A, non ?
Ou bien, le typedef defini la structure de cette class B et le friend lie cette Nested de B a la Nested de A.
Desole, je suis loin d'etre un cador en C++....


 
 [:quardelitre]  
 
Ce que friend fait, c'est que ca autorise la classe que tu lui donnes à accéder aux données privées ou protégées de la classe dans laquelle ta déclaration de friend se trouve.
Dans mon exemple, ca te permettrait depuis A::Nested d'accéder à des données privées de B.
C'est complètement décorellé de ton typedef.


---------------
last.fm
n°2203633
theshockwa​ve
I work at a firm named Koslow
Posté le 20-09-2013 à 15:30:14  profilanswer
 

fred313813 a écrit :

ca a l'air de compiler, par contre je suis obligé de rajouter la class B dans le friend :

Code :
  1. struct A
  2. {
  3.   struct Nested {};
  4. };
  5. struct B
  6. {
  7.   typedef A::Nested Nested;
  8.   friend struct A::Nested<B>;
  9. };


 
est ce normal ?


 
Qu'est-ce que tu veux dire par là ? Ta classe A::Nested est un template ?


---------------
last.fm
n°2203634
fred313813
Posté le 20-09-2013 à 15:37:09  profilanswer
 

oui effectivement. je viens de le voir.

n°2203637
fred313813
Posté le 20-09-2013 à 15:46:38  profilanswer
 

aie, ca fonctionne pour 90%, seul 10% me dit que ce n'est pas un template.....
 
et dans ces 10%, si je ne mentionne pas le template dans friend class A::Nested il m'envoie l'erreur suivante :
friend declaration does not name a class or function
 
desole d'etre saoulant ...


Message édité par fred313813 le 20-09-2013 à 15:49:15
mood
Publicité
Posté le 20-09-2013 à 15:46:38  profilanswer
 

n°2203640
theshockwa​ve
I work at a firm named Koslow
Posté le 20-09-2013 à 15:50:37  profilanswer
 

C'est quoi cette histoire de 90% / 10% ?


---------------
last.fm
n°2203642
fred313813
Posté le 20-09-2013 à 15:53:13  profilanswer
 

theshockwave a écrit :

C'est quoi cette histoire de 90% / 10% ?


et bien j'avais un certains nombres d'erreurs de compilations identiques (dans notre etude de cas nos 100%)

n°2203645
fred313813
Posté le 20-09-2013 à 15:57:43  profilanswer
 

desole, en faisant mes copier/coller, j'avais malencontreusement remplace une classe par une autre.

n°2203648
fred313813
Posté le 20-09-2013 à 16:09:18  profilanswer
 

nickel, il me reste plus qu'a resoudre ce pb de errno et puis ca va rouler.
Merci beaucoup pour ton aide.
Je vais essayer de recompiler en 3.2 apres tout ca.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  compilation de Gcc3.2 a Gcc3.4

 

Sujets relatifs
compilation code open sourceCMake, fichier toolchain et cross compilation
liste langage C (bug compilation code blocks)Erreur de compilation : expected expression before ‘%’ token
[resolu] problème compilation programmes C sous Dev-C++compilation make
Probleme compilation MacOSXcompilation sous visual studio
Compilation fichier C et Hprobléme d'installation et compilation de QWT sous netbeans
Plus de sujets relatifs à : compilation de Gcc3.2 a Gcc3.4


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR