Bonjour,
Je me forme à l'utilisation des fonction virtuelles pure.
Je part du code suivant trouvé sur le net qui compile et fonctionne très bien:
J'aimerais maintenant ajouter un 'getter' getInstance dans la classe MyClass permettant d'instancier une classe A si la variable instance est nulle.
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 #include <iostream> class A { public: virtual void action() = 0; }; class B : public A { public: void action() { std::cout << "action" << std::endl; } }; class MyClass { public: static void setInstance(A *newInstance) { instance = newInstance; } private: MyClass(); static A *instance; }; A *MyClass::instance = 0; int main(int argc, char** argv) { B myInstance; MyClass::setInstance(&myInstance); myInstance.action(); return 0; }
Ce qui donne le code suivant:
Je ne sais pas comment résoudre le problème de compilation suivant :
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 #include <iostream> class A { public: virtual void action() = 0; }; class B : public A { public: void action() { std::cout << "action" << std::endl; } }; class MyClass { public: static void setInstance(A *newInstance) { instance = newInstance; } static A& getInstance() { static A newInstance; if (!instance) instance = &newInstance; return *instance; } private: MyClass(); static A *instance; }; A *MyClass::instance = 0; int main(int argc, char** argv) { B myInstance; MyClass::setInstance(&myInstance); myInstance.action(); return 0; }
g++ -o test test.cpp
test.cpp: In static member function ‘static A& MyClass::getInstance()’:
test.cpp:26:22: erreur: cannot declare variable ‘newInstance’ to be of abstract type ‘A’
test.cpp:3:7: note: because the following virtual functions are pure within ‘A’:
test.cpp:5:22: note: virtual void A::action()
La fonction action est définie dans la classe B.
Qu'en pensez vous ?
Merci par avance.
Partager