1 pièce(s) jointe(s)
A propos des classes abstraites
Bonjour à tous,
Les données de mon dilemme sont les suivantes :
Deux classes A et B dérivants d'une classe abstraite base. Dans cette dernière get_int() est virtuelle pure. Elle est redéfinie dans A et B.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
// Classe de base abstraite
class base {
...
virtual int get_int() const = 0;
....
};
// Première classe dérivée de base
class A : public base{
....
int get_int() const
{.....}
...
};
// Seconde classe dérivée de base
class B: public base{
....
int get_int() const
{.....}
...
}; |
Une quatrième classe use contenant la méthode method qui a un argument de type ref A :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
class use {
public:
...
int method(const A & ref_A){
...
const int my_int = ref_A.get_int();
....
}
}; |
Le main ressemble à ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
int main(int argc,char * argv[]){
// Un objet de type A
A objet_A;
// Un objet de type use
use objet_use;
// A ce niveau je reçoi une erreur de segmentation
objet_use.method(objet_A);
...
} |
Je n'arrive pas à expliquer le fait que je reçoive une erreur de segmentation. Sachant que, je ne reçoi pas une telle erreur si je ne déclare pas get_int() comme virtuelle pure dans la classe de base base.
Quelqu'un voit t-il pourquoi ?
Merci d'avance.
Compilateur : g++ 3.3.5 (debian 1:3.3.5-13)
N.B.: Si vous pensez que les données ne sont pas suffisantes ou pas claires, merci de me le signaler, je donnerai plus de détails.
[pense à mettre la balise de code, Merci Farscape]
A propos des classes abstraites
Bonjour à tous,
Merci à toi Eusebe.
En effet, j'avais moi-même utilisé
Code:
const int my_int = ref_A.get_int();
Au lieu de :
Code:
const int my_int = A.get_int();
Désolé pour cette erreur dans l'énoncé :oops:
Donc, la question reste posée, comment expliquer l'erreur de segmentation que j'ai mentionné dans le premier message.
Merci d'avance.
N.B.: Tout commentaire sur la présentation est le bienvenue.
A propos des classes abstraites
Bonjour Eusebe,
Le problème était ailleurs.
T'avais bien fait de me demander un code minimal, car c'est en relisant mon code pour en extraire une formulation minimale du problème que j'ai pu localisé le vilain petit cafard. Un pointeur laissé à l'abondon !
Le problème n'a rien avoir avec les classes abstraites :oops:
Merci beaucoup et au prochain dilemme.
A bientôt.