C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Un vecteur dans une structure???
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Ataya
Guest





PostPosted: Sat Mar 25, 2006 5:06 am    Post subject: Un vecteur dans une structure??? Reply with quote



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





PostPosted: Sat Mar 25, 2006 7:06 am    Post subject: Re: Un vecteur dans une structure??? Reply with quote



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





PostPosted: Sat Mar 25, 2006 7:06 am    Post subject: Re: Un vecteur dans une structure??? Reply with quote



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





PostPosted: Sat Mar 25, 2006 9:06 am    Post subject: Re: Un vecteur dans une structure??? Reply with quote

"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





PostPosted: Sat Mar 25, 2006 10:06 am    Post subject: Re: Un vecteur dans une structure??? Reply with quote

On Sat, 25 Mar 2006 09:41:34 +0100, "Etienne Rousee"
<etienne (AT) rousee (DOT) org>:

Quote:
struct Ville;

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





PostPosted: Sat Mar 25, 2006 12:06 pm    Post subject: Re: Un vecteur dans une structure??? Reply with quote

"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





PostPosted: Sat Mar 25, 2006 12:06 pm    Post subject: Re: Un vecteur dans une structure??? Reply with quote

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





PostPosted: Sat Mar 25, 2006 1:06 pm    Post subject: Re: Un vecteur dans une structure??? Reply with quote

"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





PostPosted: Sat Mar 25, 2006 2:06 pm    Post subject: Re: Un vecteur dans une structure??? Reply with quote

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





PostPosted: Sat Mar 25, 2006 4:06 pm    Post subject: Re: Un vecteur dans une structure??? Reply with quote

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





PostPosted: Sat Mar 25, 2006 4:06 pm    Post subject: Re: Un vecteur dans une structure??? Reply with quote

"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





PostPosted: Sat Mar 25, 2006 5:06 pm    Post subject: Re: Un vecteur dans une structure??? Reply with quote

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





PostPosted: Sun Mar 26, 2006 1:06 am    Post subject: Re: Un vecteur dans une structure??? Reply with quote

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





PostPosted: Sun Mar 26, 2006 1:06 am    Post subject: Re: Un vecteur dans une structure??? Reply with quote

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





PostPosted: Sun Mar 26, 2006 7:06 pm    Post subject: Re: Un vecteur dans une structure??? Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.