Bonjour,
Voici le problème auquel je suis confronté. J'ai une classe Abstraite (donc virtuelle pure) et une classe qui Fille qui hérite de la classe Abstraite. La classe Fille réimplémente bien les méthodes virtuelles pures, mais ne réimplémente pas toutes les autres méthodes de la classe Abstraite.
J'instancie un pointeur du type de la Classe Fille et lorsque j'essaie d'accéder à une méthode de la classe Abstraite que la classe Fille n'a pas réimplémenté, j'ai une erreur de compilation.
Voici le code ( il est ici simplifié au maximum mais montre bien le problème )
et voici l'erreur du compilateur
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 #include <string> using namespace std; class Abstraite { public: void fonction(string Fichier) { std::cout << "Abstraite::fonction(std::string Fichier)" << Fichier << std::endl; } virtual void fonction(int i) { std::cout << "Abstraite::fonction()" << i << std::endl; } virtual void abstraction() = 0; }; class Fille : public Abstraite { public: virtual ~Fille() { std::cout << "Fille::~Fille()" << std::endl; } virtual void fonction(int i) { std::cout << "Fille::fonction()" << i << std::endl; } void abstraction() { std::cout << "Fille::abstraction()" << std::endl; } }; int main (int arcg, char* argv[]) { Fille* ptrFille = new Fille(); ptrFille->fonction(std::string("Ma Phrase")); return 0; }
J'utilise le compilateur :test.cpp: In function 'int main(int, char**)':
test.cpp:44: erreur: no matching function for call to 'Fille::fonction(std::string)'
test.cpp:30: note: candidats sont: virtual void Fille::fonction(int)
sous Linux RHLE 5.4.g++ (GCC) 4.2.2
Copyright © 2007 Free Software Foundation, Inc.
Ce logiciel est libre; voir les sources pour les conditions de copie. Il n'y a PAS
GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.
Petites remarques que je ne m'explique pas :
- Si je supprime la méthode fonction(int i) des deux classes, le prgramme compile
- Si je caste le pointeur en un pointeur de type Abstraite, le programme compile
Partager