compilation de Gcc3.2 a Gcc3.4

compilation de Gcc3.2 a Gcc3.4 - C++ - Programmation

Marsh Posté le 20-09-2013 à 13:46:28    

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

Reply

Marsh Posté le 20-09-2013 à 13:46:28   

Reply

Marsh Posté le 20-09-2013 à 14:41:31    

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
Reply

Marsh Posté le 20-09-2013 à 14:47:15    

oui tout a fait.

Reply

Marsh Posté le 20-09-2013 à 15:03:33    

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
Reply

Marsh Posté le 20-09-2013 à 15:13:37    

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++....

Reply

Marsh Posté le 20-09-2013 à 15:28:36    

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 ?

Reply

Marsh Posté le 20-09-2013 à 15:29:34    

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
Reply

Marsh Posté le 20-09-2013 à 15:30:14    

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
Reply

Marsh Posté le 20-09-2013 à 15:37:09    

oui effectivement. je viens de le voir.

Reply

Marsh Posté le 20-09-2013 à 15:46:38    

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
Reply

Marsh Posté le 20-09-2013 à 15:46:38   

Reply

Marsh Posté le 20-09-2013 à 15:50:37    

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


---------------
last.fm
Reply

Marsh Posté le 20-09-2013 à 15:53:13    

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%)

Reply

Marsh Posté le 20-09-2013 à 15:57:43    

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

Reply

Marsh Posté le 20-09-2013 à 16:09:18    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed