Le code suivant précise dans la classe mère que l'operateur '=' doit être surchargé dans la classe fille. Or dès utilisation dans le main, il semblerait que l'aspect 'virtuel' de la surcharge ne fonctionne pas et qu'il cherche à appeller l'opérateur de la classe mère (non implémenté) plutôt que sa ré-écriture dans la classe fille !
Bref, je comprend vraiment pas là ou j'ai faux :
Message d'erreur lors de l'édition de liens :
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
48
49
50
51 #include <cstdlib> #include <cstdio> #include <ctime> class a { public: a(); //virtual a& operator=(const a &ref) = 0; virtual a& set(const a &ref) = 0; void print() const; protected: int x; }; class b : public a{ public: //a& operator=(const a &ref); a& set(const a &ref); }; a::a() { srand(time(NULL)); x = rand(); } void a::print() const { printf("x = %d\n", x); } /* a& b::operator=(const a &ref) { x = dynamic_cast<const b*>(&ref)->x; return *this; } */ a& b::set(const a &ref) { x = dynamic_cast<const b*>(&ref)->x; return *this; } int main() { b x, y; x.print(); //y = x; y.set(x); y.print(); return 0; }
Si j'utilise à la place de l'opérateur '=', la fonction 'set' la compilation passe bien.main.o:main.cpp: (.text$_ZN1baSERKS_[b::operator=(b const&)]+0x14): undefined reference to `a::operator=(a const&)'
collect2: ld returned 1 exit status
Partager