Bonsoir à tous.
Je suis bien conscient que 3 questions dans un même sujet n'est peut-être pas une chose très bien à faire. Mais étant donné que ces questions sont relativement fermées et toutes en rapport avec les vectors, je me permet...


D'après votre exemple d'utilisation des vectors dans la FAQ C++, la déclaration
Code : Sélectionner tout - Visualiser dans une fenêtre à part
std::vector<Symbole> symboles;
devrait créer un vector de Symbole vide du nom de symboles.
Maintenant supposons que l'on programme une classe TableSymboles dont l'unique attribut sera le vector déclaré ci-dessus. Si cette même déclaration est écrite dans TableSymboles.h.
Est-il nécessaire de faire quelque chose dans le constructeur si le vector est déjà créé :



Supposons maintenant que de la Symbole dérivent plusieurs autres classes (Derive1, Derive2) qui contiennent plus d'attributs que Symbole et donc nécessitent plus de place mémoire.
Est-il possible de conserver la déclaration de vector ci-dessus, ou bien est-ce que lors de l'ajout d'une instance de Derive2 au vector, il n'y aura pas la place nécessaire pour recevoir l'instance de Derive2 complètement :



Dernière question moins théorique.
J'ai commencé à coder en supposant qu'il ne fallait rien faire dans le constructeur de ma classe TableSymboles et que l'ajout d'une instance de classe dérivé de Symbole dans un vecteur de Symbole ne posait pas de problème.
Lors de la compilation d'un TableSymboles.cpp comprenant seulement le constructeur, j'obtiens ceci:
Citation Envoyé par g++ TableSymboles.cpp
/usr/bin/ld: Undefined symbols:
_main
Symbole::~Symbole()
collect2: ld returned 1 exit status
Or j'ai bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
#include "TableSymboles.h"
dans TableSymboles.cpp et j'ai biendans TableSymboles.h.
Enfin le destructeur de Symbole est déclaré comme ceci dans Symbole.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
  //Destructeur
  ~Symbole();
(et son implémentation est vide dans le .cpp associé puisque Symbole ne créer rien dynamiquement en mémoire)

Je suppose que lorsqu'on créer un vector d'objets, la stl a été faite de façon à vérifier que ces objets ont bien des constructeurs et destructeurs qui seront appelés lors de l'ajout ou de la suppression d'un objet dans le vecteur.
Mais pourquoi g++ ne trouve-t-il pas mon destructeur :


Oulà! J'espère que je n'ai pas été trop long... J'ai bien essayé de m'informer avec la doc "officielle" de la STL, mais ça ne m'a pas vraiment aidé

Merci d'avance pour votre aide