Je tente d'écrire une simple mise en œuvre de l'arbre B + (très précoce). J'ai une classe virtuelle avec quelques fonctions. Inutile de dire que je suis très nouveau dans ces stratégies et je rencontre toutes sortes de problèmes.
Je tente de créer un nœud racine dans la classe BTREE. Le nœud racine sera une Bbranch, qui devrait hériter de Bnode? Je reçois des erreurs p> Le code est celui-ci p> merci pour toutes les informations que vous pouvez me donner. < / p> p>
5 Réponses :
Le compilateur semble être assez clair sur ce qui ne va pas. Vous ne pouvez pas déclarer un Vous ne pouvez pas déclarer des instances de classes abstraites, qui sont des classes qui ont des fonctions virtuelles pures. P> En outre, vous avez déclaré bbranch code> car il existe toujours une fonction virtuelle pure dans cette classe. Vous avez défini
ins code>, mais
del code> est toujours indéfini. Définissez cela dans
Bbranch CODE> (et
BLAFE CODE>) Et vous devez être bien.
root code> dans le constructeur em>. Vous vouliez dire que c'est une variable membre em>, ce qui signifie qu'il doit être déclaré à côté de em> le constructeur, pas à l'intérieur p> p> < Pré> xxx pré> p>
Dans le constructeur BTREE, vous essayez de créer une instance de Bbranch. Mais Bbranch n'a pas de mise en œuvre de Del (), c'est donc une classe abstraite et ne peut être instanciée. Pour qu'une classe soit instanciée, elle doit être concrète (c'est-à-dire toutes ses fonctions membres doivent avoir une mise en œuvre). P>
La première erreur concerne le fait que Bbranch ne fournit aucun remplacement pour Bnode :: del. Etant donné que del est une fonction virtuelle pure (il n'a pas de mise en œuvre par défaut), toute classe qui hérite de Bnode doit soit une implémentation de DEL, ou de cette classe sera abstraite, c'est-à-dire qu'elle ne peut pas être instanciée. P>
La deuxième erreur est parce que vous n'avez pas de bTtree :: variable membre racine. Vous déclarez raconter la racine dans le constructeur de Btree, puis il est détruit lorsque le constructeur se termine, alors lorsque vous essayez d'accéder à la racine au sein de Breee :: INS, la racine est hors de portée (et l'objet lui-même est probablement détruit). P>
Si vous créez une classe de base abstraite comme si vous avez fait avec Bnode et que vous souhaitez créer une classe dérivée en béton, vous devez mettre en œuvre des fonctions virtuelles toutes les em>. Bbranch and Bluef manquait une implémentation de 'del' afin qu'ils restent abstraites. P>
Le message d'erreur vous donne toutes les informations dont vous avez besoin. Lisez-le. P>
Vous essayez de créer une variable de type Je sens ceci est une question de devoirs. Je vais donc vous encourager à revenir à votre manuel et à lire des classes abstraites, comment sont-elles utilisées et plus important encore, ce qui est nécessaire pour mettre fin à la "abstrait" < / em>. p> bbranch code>, mais votre classe
bbranch code> est une classe abstraite, comme
Bnode code>, à partir de laquelle Il hérit de. P>
Je tiens à vous remercier tous pour vos réponses ... J'admets, je ne suis pas un excellent programmeur C ++ et j'essaie d'appliquer certaines de ces nouvelles idées (classes virtuelles / fonctions) dans ce projet. J'ai également des difficultés à faire des têtes ou des queues des codes d'erreur, mais vous avez tous fait un excellent travail pour m'aider à voir mon erreur. Merci!