OVH Cloud OVH Cloud

un petit probleme avec vector

12 réponses
Avatar
ricky
bonjour

j ai un petit probleme idiot en voulant utiliser un vector

j ai construit une classe du style :
class Ligne
{
string var1;
string var2;
const int OK;
public:
Ligne():OK(0) { ... };
etc etc
}

et j'ai voulu faire un vecteur de ligne :
vector<Ligne> fichier;

mais cela coince lorsque je veux faire :

Ligne ligne(.....);
fichier.push_back(ligne); // ( ou fichier.insert( ... ); )

il semble qu'il ne sache pas faire la copie (et un constructeur de copie
ne change pas le probleme) :
- in member fonction 'ligne& ligne::operator=(const Ligne &)'
- non static const member

ou est mon erreure de debutant ???
dois je construire mon propre operator = ?

@+
ricky

@+
ricky

2 réponses

1 2
Avatar
James Kanze
(Bertrand Motuelle) writes:

|> wrote in message
|> news:...
|> > Loïc Joly wrote in message
|> > news:<bp0vhh$urs$...
|> > > L'opérateur = et le constructeur de copie sont
|> > > sémentiquement proche, mais dans le langage, ce sont des
|> > > entités bien distinctes.

|> > > Et ici, tu as besoin du premier.

|> > S'il utilise std::vector, il en a besoin des deux.

|> Ok, la norme stipule que les éléments d'un container doivent
|> être "Assignable", mais j'ai du mal à imaginer qu'une
|> implémentation de push_back() fasse appel à l'opérateur
|> d'affectation (le posteur initial parlait de problème de
|> compilation lors de l'instantiation de push_back()).

Dans les implémentations que j'ai vu, push_back se ressemble :

void
vector<T...>::push_back( T const& obj )
{
insert( end(), obj ) ;
}

La fonction insert, elle, a bien besoin de l'affectation. Même si
elle ne servira pas effectivement lors qu'on insère à la fin
(comme c'est le cas avec push_back), les templates sont instantiés,
et l'opérateur doit y être.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
ricky writes:

|> > S'il utilise std::vector, il en a besoin des deux.

|> oki je vais les faire :-)

|> finalement, il ne faut pas etre paresseux en cpp :-)
|> k'ai voulu m'eviter ces constructions .. pour rien en fait

Mais si tu supprimes le const sur le membre, le compilateur les fournira
pour toi ; tu n'as rien à faire.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
1 2