 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Ataya Guest
|
Posted: Sat Mar 25, 2006 5:06 am Post subject: Un vecteur dans une structure??? |
|
|
Voila, tout est dans le titre, je cherche a mettre un vecteur dans une
structure:
Voila mon code:
typedef struct {int xV;
int yV;
vector<tabVoisine>(1); }Ville;
Le message d'erreur:
Impossible de créer la spécialisation template depuis
'vector<T,Allocator>'
Je ne comprend pas le message d'erreur, qq'un aurait il une idée,
Merci. |
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sat Mar 25, 2006 7:06 am Post subject: Re: Un vecteur dans une structure??? |
|
|
On 24 Mar 2006 20:18:38 -0800, "Ataya"
<teisseire.sebastien (AT) gmail (DOT) com>:
| Quote: | Voila, tout est dans le titre, je cherche a mettre un vecteur dans une
structure:
|
Un objet de classe std::vector<> est un tableau.
Un vecteur est un objet mathématique apparenté, mais aux propriétés
assez différentes.
| Quote: |
Voila mon code:
typedef struct
|
Ça, c'est du C. À éviter en C++.
| Quote: | {int xV;
int yV;
vector<tabVoisine>(1);
|
Le problème vient d'ici.
Si tu veux déclarer un tableau d'objets de classe Machin, il faut
écrire :
vector<Machin> mon_tableau;
Inutile de préciser la taille -- d'ailleurs, je suis prêt à parier que
tu ne la connais pas à l'avance.
Pour résumer, tu devrais déclarer ta classe ainsi :
struct Ville
{
int xV;
int yV;
std::vector <QuelqueChose> voisines;
};
Une question reste : que doit-on mettre à la place de "QuelqueChose" ?
Qu'est-ce que ton tableau doit contenir ? |
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sat Mar 25, 2006 7:06 am Post subject: Re: Un vecteur dans une structure??? |
|
|
J'ai écrit :
| Quote: | Une question reste : que doit-on mettre à la place de "QuelqueChose" ?
|
Si tu ne peux pas répondre toi-même à cette question, explique ce que
tu veux faire, on pourra peut-être t'aider. |
|
| Back to top |
|
 |
Etienne Rousee Guest
|
Posted: Sat Mar 25, 2006 9:06 am Post subject: Re: Un vecteur dans une structure??? |
|
|
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit ...
| Quote: | On 24 Mar 2006 20:18:38 -0800, "Ataya"
teisseire.sebastien (AT) gmail (DOT) com>:
Voila, tout est dans le titre, je cherche a mettre un vecteur dans une
structure:
Un objet de classe std::vector<> est un tableau.
Un vecteur est un objet mathématique apparenté, mais aux propriétés
assez différentes.
Voila mon code:
typedef struct
Ça, c'est du C. À éviter en C++.
{int xV;
int yV;
vector<tabVoisine>(1);
Le problème vient d'ici.
Si tu veux déclarer un tableau d'objets de classe Machin, il faut
écrire :
vector<Machin> mon_tableau;
Inutile de préciser la taille -- d'ailleurs, je suis prêt à parier que
tu ne la connais pas à l'avance.
Pour résumer, tu devrais déclarer ta classe ainsi :
struct Ville
{
int xV;
int yV;
std::vector <QuelqueChose> voisines;
};
Une question reste : que doit-on mettre à la place de "QuelqueChose" ?
Qu'est-ce que ton tableau doit contenir ?
|
Peut-être quelque chose comme ça:
struct Ville;
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
Mais comme il a posté son message à 5 h 18, il faudra peut-être
attendre un peu pour qu'il en dise plus...
--
Etienne |
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sat Mar 25, 2006 10:06 am Post subject: Re: Un vecteur dans une structure??? |
|
|
On Sat, 25 Mar 2006 09:41:34 +0100, "Etienne Rousee"
<etienne (AT) rousee (DOT) org>:
Est-ce obligatoire ?
| Quote: | struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
|
J'y ai pensé aussi. Mais la relation "est voisine de" est symétrique.
Du coup, si v1 et v2 sont voisines, &v1 devrait se trouver dans
v2.voisines, et vice-versa. Il y a duplication de l'information, et ça
risque d'être assez pénible à gérer. |
|
| Back to top |
|
 |
Etienne Rousee Guest
|
Posted: Sat Mar 25, 2006 12:06 pm Post subject: Re: Un vecteur dans une structure??? |
|
|
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit ...
| Quote: | On Sat, 25 Mar 2006 09:41:34 +0100, "Etienne Rousee"
etienne (AT) rousee (DOT) org>:
struct Ville;
Est-ce obligatoire ?
|
Non, mais je préfère, pour des raisons de lisibilité.
J'ai comme ça la liste des structures et des classes
en un clin d'oeil.
| Quote: | struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
J'y ai pensé aussi. Mais la relation "est voisine de" est symétrique.
Du coup, si v1 et v2 sont voisines, &v1 devrait se trouver dans
v2.voisines, et vice-versa. Il y a duplication de l'information, et ça
risque d'être assez pénible à gérer.
|
Non, c'est un pointeur. Il suffit qu'il y ait un vecteur de toutes les
villes
quelque part , et dans chacune d'entre elles, on met seulement les
adresses des voisines. Ainsi, il n'y a pas duplication.
Par exemple:
struct Ville;
struct Application;
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines; // Cette structure ne fera que
// des affectation de
pointeurs
};
struct Application
{
std::vector <Ville *> Villes; // C'est cette structure qui fera les
"new"
};
--
Etienne |
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sat Mar 25, 2006 12:06 pm Post subject: Re: Un vecteur dans une structure??? |
|
|
On Sat, 25 Mar 2006 12:21:56 +0100, "Etienne Rousee"
<etienne (AT) rousee (DOT) org>:
| Quote: | Il y a duplication de l'information, et ça
risque d'être assez pénible à gérer.
Non,
|
Si. J'ai parlé de duplication de l'information[*], pas de duplication
des données.
[*] En l'occurence, duplication de l'information "v1 est voisine de
v2", sous la forme "v2 est voisine de v1".
| Quote: | si v1 et v2 sont voisines, &v1 devrait se trouver dans
v2.voisines, et vice-versa. |
|
|
| Back to top |
|
 |
Etienne Rousee Guest
|
Posted: Sat Mar 25, 2006 1:06 pm Post subject: Re: Un vecteur dans une structure??? |
|
|
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:d4ca22tata4fanuh9kojlqs05466pn5cf3 (AT) 4ax (DOT) com...
| Quote: | On Sat, 25 Mar 2006 12:21:56 +0100, "Etienne Rousee"
etienne (AT) rousee (DOT) org>:
Il y a duplication de l'information, et ça
risque d'être assez pénible à gérer.
Non,
Si. J'ai parlé de duplication de l'information[*], pas de duplication
des données.
[*] En l'occurence, duplication de l'information "v1 est voisine de
v2", sous la forme "v2 est voisine de v1".
|
Ok, mais ce n'est pas bien gênant.
--
Etienne |
|
| Back to top |
|
 |
Sylvain Guest
|
Posted: Sat Mar 25, 2006 2:06 pm Post subject: Re: Un vecteur dans une structure??? |
|
|
Etienne Rousee wrote on 25/03/2006 13:19:
| Quote: | [*] En l'occurence, duplication de l'information "v1 est voisine de
v2", sous la forme "v2 est voisine de v1".
Ok, mais ce n'est pas bien gênant.
|
c'est même, imho, la meilleure façon (la plus rapide, la moins coûteuse)
pour permettre de trouver toutes les villes voisines d'une ville quelconque.
mais Fabien a peut être un meilleur algo.
Sylvain. |
|
| Back to top |
|
 |
Ataya Guest
|
Posted: Sat Mar 25, 2006 4:06 pm Post subject: Re: Un vecteur dans une structure??? |
|
|
Tout d'abord merci a tous..et bravo! pour votre sens de la déduction!
En effet ma structure correspond a une ville, elle contient ses
coordonnées, et un tableau contenant ses villes voisines donc la
structure proposée ici correspond bien a ce que je voulait faire:
struct Ville;
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
J'ai plusieurs questions...
_Est-ce du c++ de déclarer les struct de cette manière?
_<Ville*> : est-ce un pointeur? ou alors qu'est-ce que ' * ' vient
faire là?
_Le fait de faire une de strucuture contenant un tableau de cette meme
strucutre pose il un probleme particulier? |
|
| Back to top |
|
 |
Etienne Rousee Guest
|
Posted: Sat Mar 25, 2006 4:06 pm Post subject: Re: Un vecteur dans une structure??? |
|
|
"Ataya" <teisseire.sebastien (AT) gmail (DOT) com> a écrit ...
| Quote: | J'ai plusieurs questions...
_Est-ce du c++ de déclarer les struct de cette manière?
|
Oui.
Je suppose que tu n'as pas encore vu les classes ?
| Quote: | _<Ville*> : est-ce un pointeur?
|
Oui.
| Quote: | _Le fait de faire une de strucuture contenant un tableau
de cette meme strucutre pose il un probleme particulier?
|
Non.
--
Etienne |
|
| Back to top |
|
 |
Sylvain Guest
|
Posted: Sat Mar 25, 2006 5:06 pm Post subject: Re: Un vecteur dans une structure??? |
|
|
Ataya wrote on 25/03/2006 16:55:
| Quote: |
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
|
en complément du point d'Etienne:
une déclaration de classe (par le mot "class") ou d'une structure (par
le mot "struct") est "grossièrement équivalente" (pour des définitions
simples), une première différence est simplement que tous les membres
d'une structure sont publics (visibles de tous, partout) alors que les
membres d'une classe sont (implicitement) protégés.
| Quote: | _Le fait de faire une de strucuture contenant un tableau de cette meme
strucutre pose il un probleme particulier?
|
cela vous impose simplement de déclarer la structure (le "struct
Ville;") avant de la définir (le "struct Ville { la_definition };").
Sylvain. |
|
| Back to top |
|
 |
Loïc Joly Guest
|
Posted: Sun Mar 26, 2006 1:06 am Post subject: Re: Un vecteur dans une structure??? |
|
|
Sylvain a écrit :
| Quote: | Ataya wrote on 25/03/2006 16:55:
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
en complément du point d'Etienne:
une déclaration de classe (par le mot "class") ou d'une structure (par
le mot "struct") est "grossièrement équivalente" (pour des définitions
simples), une première différence
|
Je n'en connais pas d'autres...
| Quote: | est simplement que tous les membres
d'une structure sont publics
|
(par défaut, ça peut se changer)
| Quote: | (visibles de tous, partout) alors que les
membres d'une classe sont (implicitement) protégés.
|
Privé et non pas protégés. Et par défaut uniquement aussi.
--
Loïc |
|
| Back to top |
|
 |
Sylvain Guest
|
Posted: Sun Mar 26, 2006 1:06 am Post subject: Re: Un vecteur dans une structure??? |
|
|
Loïc Joly wrote on 26/03/2006 01:40:
| Quote: |
les membres d'une classe sont
(implicitement) protégés.
Privé et non pas protégés.
|
merci de cette précision.
"protégé" se lisait ici (selon le langage courant) non accessible,
masqué, ..., il est plus pertinent de dire "private" en effet (pour
éviter une méprise avec "protected")
| Quote: | Et par défaut uniquement aussi.
|
ce que dit exactement "implicitement".
Sylvain. |
|
| Back to top |
|
 |
kanze.james@neuf.fr Guest
|
Posted: Sun Mar 26, 2006 7:06 pm Post subject: Re: Un vecteur dans une structure??? |
|
|
Sylvain wrote:
| Quote: | Ataya wrote on 25/03/2006 16:55:
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
en complément du point d'Etienne:
une déclaration de classe (par le mot "class") ou d'une
structure (par le mot "struct") est "grossièrement
équivalente" (pour des définitions simples), une première
différence est simplement que tous les membres d'une structure
sont publics (visibles de tous, partout) alors que les membres
d'une classe sont (implicitement) protégés.
|
Le « grossièrement », c'est de trop -- qu'on utilise le mot clé
struct ou le mot clé class, c'est toujours une classe qu'on
définit. On peut même écrire :
struct Ville ;
class Ville { } ;
ou vice-versa.
| Quote: | _Le fait de faire une de strucuture contenant un tableau de
cette meme strucutre pose il un probleme particulier?
|
Attention : la structure ici ne contient pas de tableau de la
même structure. Elle en contient un tableau de pointeurs à la
même structure. C'est une différence de poids. (Logiquement, il
n'y a pas de raison pourquoi std::vector< Ville > voisines ne
marcherait pas non plus. Mais la norme l'interdit. Et
évidemment, Ville voisines[N] ne pourrait jamais marcher.)
| Quote: | cela vous impose simplement de déclarer la structure (le
"struct Ville;") avant de la définir (le "struct Ville {
la_definition };").
|
Même pas. Le « struct Ville » en tête de la définition suffit.
--
James Kanze kanze.james (AT) neuf (DOT) fr
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 |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|