Bonjour à tous, j'espère que mon petit problème vous intéressera.
J'ai une classe abstraite, je crée ensuite une classe ayant comme membre une référence sur cette classe abstraite et enfin je crée une classe ayant comme membre un vecteur de ma classe précédente :
A la compilation le compilateur me dit en gros qu'il y'a un problème avec mon opérateur d'affectation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <vector> struct foncteur { virtual int operator()(double ) =0; }; struct Classe_1 { Classe_1(foncteur & f) : f(f) {} private : foncteur & f; }; struct Classe_2 { Classe_2(int n, foncteur & f); private : int n; std::vector<Classe_1> V; }; Classe_2::Classe_2(int n, foncteur & f) : n(n) { V.reserve(n); for(int i=0; i<n; ++i) V.push_back(Classe_1(f)); }
Lorsque je définis l'opérateur d'affectation trivial il n'y a plus de problème, de même lorsque j'utilise une liste au lieu d'un vecteur il n'y a plus de problème.test.cpp: In member function ‘Classe_1& Classe_1::operator=(const Classe_1&)’:
test.cpp:7: instantiated from ‘void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = Classe_1, _Alloc = std::allocator<Classe_1>]’
/usr/include/c++/4.0.0/bits/stl_vector.h:610: instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Classe_1, _Alloc = std::allocator<Classe_1>]’
test.cpp:22: instantiated from here
test.cpp:7: error: non-static reference member ‘foncteur& Classe_1::f’, can't use default assignment operator
/usr/include/c++/4.0.0/bits/vector.tcc: In member function ‘void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = Classe_1, _Alloc = std::allocator<Classe_1>]’:
/usr/include/c++/4.0.0/bits/vector.tcc:260: warning: synthesized method ‘Classe_1& Classe_1::operator=(const Classe_1&)’ first required here
J'aimerais donc comprendre pourquoi je dois définir l'opérateur d'affectation dans mon cas ainsi que pourquoi le problème est soulevé lorsque j'utilise un vecteur et pas une liste.
Je vous remercie d'avance pour vos réponses.
Partager