à tous,

Je sèche sur un problème stupide depuis hier donc je vous en fais part car ça me parait vraiment simple mais je vois pas.

J'ai 2 classes Sommet et Atome. Atome hérite de Sommet :
Sommet.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef SOMMET_H
#define SOMMET_H
 
#ifndef OBJECT_H
   #include "Object.h"
#endif
 
class Arete;
class Graphe;
 
using namespace std;
 
class Sommet : public Object
{
   private :
      vector<Arete*> gArete;
      Graphe* gGraphe;
 
   public:
      //...
     virtual void addArete(Arete* arete);
};
#endif
Sommet.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#include "Sommet.h"
 
//...
 
void Sommet::addArete(Arete* arete)
{
   this->gArete.push_back(arete);
}
 
//...
Atome.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef ATOME_H
#define ATOME_H
 
class Liaison;
class Molecule;
 
#ifndef RESEAU_H
   #include "Sommet.h"
   #include "Arete.h"
#endif
 
using namespace std;
 
class Atome : public Sommet
{
   public:
      //...
      virtual void addArete(Liaison* l);
      virtual void addArete(Arete* a);
};
 
#endif
Atome.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "Atome.h"
 
//...
 
void Atome::addArete(Liaison* l)
{
   Sommet::addArete(l);
}
 
void Atome::addArete(Arete* a)
{
   try
   {
      this->addArete(dynamic_cast<Liaison*>(a));
   }
   catch(...)
   {
      cout << "Atome : addGArete() -> Erreur tentative de création de chimère = " << a->getName() << "(" << a->getClass() << ")"<< endl;
   }
}
C'est la fonction addArete qui me pose un problème. Dans Atome lorsque j'appelle le addArete de Sommet j'ai cette erreur :
Atome.cpp: In member function «virtual void Atome::addArete(Liaison*)":
Atome.cpp:14: erreur: no matching function for call to «Atome::addArete(Liaison*&)"
Sommet.h:23: note: candidats sont: virtual void Sommet::addArete(Arete*)

Atome.cpp: In member function «virtual void Atome::addArete(Arete*)":
Atome.cpp:21: erreur: cannot dynamic_cast «a" (of type «class Arete*") to type «struct Liaison*" (target is not pointer or reference to complete type)
Donc 2 soucis :
  • le premier : il ne fait pas la liaison entre le addArete de la classe Sommet et celui de la classe Atome.
  • le second : mon cast est foireux (à cause de ça je suppose).
Quelqu'un voit-il pourquoi, dans la classe Atome, le compilo ne fait pas le lien avec la classe Sommet ??

Merci d'avance pour votre aide.