Euh, si j'ai déjà mis dans le .h, il va me dire 'forward declaration ... je ne vois pas que ça marche
Des deux choses une : si tu le déclares extern dans l'en-tête, il n'est toujours pas défini, et il faut bien que tu le définir quelque part. C'est ce que j'ai supposé être ce que tu voulais. Sinon, si tu le définis (sans extern, donc, ou avec un initialisateur) dans l'en-tête, tu as une instance par unité de compilation, et tu ne pourrais utiliser l'en-tête que dans une unité de compilation par programme -- dans ce cas-là, je me pose bien la question pourquoi tu le mets dans l'en-tête.
Ceci dit : est-ce qu'il ne serait pas logique de définir un type « Board », qui contient un tel vector, et dont le constructeur s'occupe de l'initialisation complète ? (Plus généralement : il vaut mieux ne pas utiliser les types standard directement pour les abstractions importantes dans ton application.)
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
eb wrote:
kanze wrote:
[...]
Je voudrais faire :
foo.h
std::vector<std::vector<T *> > my_T
Il ne te manquerait pas un « extern » ici, par hazard ?
foo.cpp
???? -> dimensionner my_T et le remplir avec des new T
Exactement comme avant. Si my_T est extern dans le .h, il
faut la définir ici, donc :
Euh, si j'ai déjà mis dans le .h, il va me dire 'forward
declaration ... je ne vois pas que ça marche
Des deux choses une : si tu le déclares extern dans l'en-tête,
il n'est toujours pas défini, et il faut bien que tu le définir
quelque part. C'est ce que j'ai supposé être ce que tu voulais.
Sinon, si tu le définis (sans extern, donc, ou avec un
initialisateur) dans l'en-tête, tu as une instance par unité de
compilation, et tu ne pourrais utiliser l'en-tête que dans une
unité de compilation par programme -- dans ce cas-là, je me
pose bien la question pourquoi tu le mets dans l'en-tête.
Ceci dit : est-ce qu'il ne serait pas logique de définir un
type « Board », qui contient un tel vector, et dont le
constructeur s'occupe de l'initialisation complète ? (Plus
généralement : il vaut mieux ne pas utiliser les types standard
directement pour les abstractions importantes dans ton
application.)
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Euh, si j'ai déjà mis dans le .h, il va me dire 'forward declaration ... je ne vois pas que ça marche
Des deux choses une : si tu le déclares extern dans l'en-tête, il n'est toujours pas défini, et il faut bien que tu le définir quelque part. C'est ce que j'ai supposé être ce que tu voulais. Sinon, si tu le définis (sans extern, donc, ou avec un initialisateur) dans l'en-tête, tu as une instance par unité de compilation, et tu ne pourrais utiliser l'en-tête que dans une unité de compilation par programme -- dans ce cas-là, je me pose bien la question pourquoi tu le mets dans l'en-tête.
Ceci dit : est-ce qu'il ne serait pas logique de définir un type « Board », qui contient un tel vector, et dont le constructeur s'occupe de l'initialisation complète ? (Plus généralement : il vaut mieux ne pas utiliser les types standard directement pour les abstractions importantes dans ton application.)
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34