[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux] C++ , problemes



Le Thu, 05 Jul 2001 08:31:16 +0200, Pascal Bleser <pbleser@atosorigin.com> a écrit :
> > Peut-etre cela vient-il de ton compilateur:
> > d'apres ma courte experience, le "=0;" ne passait pas trop
> > a la compil avec "g++". C'est peut-etre une c... mais essaye
> 
> Non non non, la...
> 
> Ca fonctionne parfaitement bien avec g++ (et c'est de loin un
> des meilleurs compilos C++ au point de vue conformité avec le
> standard ANSI C++).
	Oui, c'est vrai.

J'ai repris le code, tout mis dans un seul fichier .cc avec un main () au bout et je t'ai recompilé ça avec l'option -Wall pour voir tous les warnings générés.
A part le fait que le destructeur de la classe de base doit etre virtuel, je n'ai pas les mêmes erreurs que toi.
Donc, je peux pas juger sur l'erreur car je la comprends pas, à part que c'est une erreur de linkage à partir de layer2.

:::
ether.o(.gnu.linkonce.t.__tfQ26netlib5ether+0x10): undefined reference to
`netlib::layer2 type_info function'
:::
Si qq'un a une idée, chuis preneur !


> 
> > en remplacant "=0;" par {}.
> C'est pas pareil...
Dans un cas, la classe devient abstraite (=0) (elle n'est plus instanciable) et dans l'autre non.

[...]

> Déjà, tu dois absolument les mettre virtual aussi dans la
> classe dérivée (ether):
> 
> virtual char* name() {}
> virtual void checkLayer() {}
> 

Pourquoi ?
On est dans une classe dérivée qui n'a pas besoin de "virtual" sauf si elle a elle aussi une classe dérivée !
Par contre, le destructeur d'une classe de base doit toujours etre virtuel.
Et le mot "virtual" pour une fonction, est utilisé dans une classe pour dire que cette fonction pourrait (doit si on a =0) etre réutilisée dans une classe dérivée.

> Et puis, en passant (un peu de "good practice" ;)), ta méthode
> name() c'est certainement
> 
> virtual const std::string getName() const {}

C'est plutot :
virtual const std::string   &    getName() const {};
Je suppose que c'est un oubli ;-)

Moi, dans ce cas, je préfère passer un string& en paramètre pour ne pas avoir à générer de variable temporaire avé le return d'un "const std::string&".

[...]

> > > Kesako ??? une idee pour moa ?
> Oui: il te manque le "virtual" dans la classe dérivée.
Un, j'ai pas compris son erreur.
Mais deux, le "virtual" ne sert pas dans une classe dérivée, cela ne sert que si une classe peut ou doit etre derivee, donc, dans une classe de base.


Forza linux.

Eugene Sandford 
--
Albert Inc. Rue du Mas de l'Olivier. 34 000 Montpellier
e-mail : esa@albert.com. Tel : (+33) 499 13 09 00; Fax : (+33) 499 13 09 01

[ Soyez précis dans vos sujets svp afin de déterminer directement  ]
[ le type de demande...                                            ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php     ]
[ http://LinuxBe.org              Contact: listmaster@linuxbe.org  ]