Bonjour à tous!
Je veux initialiser un objet de type vector < circular_buffer < int > > pour stocker des données en provenance d'une carte d'acquisition. Chaque voie va dans un buffer circullaire, que je dépile ailleurs.
Mon soucis c'est que je n'arrive pas à initialiser le circular_buffer avec la taille voulue (capacity() retourne toujours 0). Pourtant le même code avec vector < vector < int > > fonctionne très bien!
Je n'ai rien trouvé dans la documentation de boost qui explique ce phénomène, par contre la sortie de gcc donne des warnings que je ne comprends pas.
Voilà le code :
Et voilà la sortie de gcc :
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 #include <iostream> #include <vector> #include <boost/circular_buffer.hpp> using namespace std; int main() { int nbRow = 3 , nbCol = 5; boost::circular_buffer <int> cb(nbCol); cout << "cb.capacity = " << cb.capacity() << "\n"; vector < boost::circular_buffer <int> > mcb(nbRow, boost::circular_buffer <int> (nbCol)); cout << "mcb.capacity(vec) = " << mcb.capacity() << "\n"; cout << "mcb.capacity(cb) = " << mcb[0].capacity() << "\n"; vector < vector <int> > array(nbRow, vector <int> (nbCol)); cout << "array.capacity(row) = " << array.capacity() << "\n"; cout << "array.capacity(col) = " << array[0].capacity() << "\n"; }
Evidemment je pourrais me contenter de ça et faire un set_capacity() sur chaque élément du vecteur, mais je trouve ça dommage, de créer des objets pour les redimensionner tout de suite après.
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 make && ./simpletemplate g++ -c -pipe -O2 -march=i586 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -O2 -g -Wall -W -I/usr/share/qt4/mkspecs/default -I.-I. -I../../../boost/boost_1_36_0 -I. -o main.o main.cpp ../../../boost/boost_1_36_0/boost/circular_buffer/base.hpp: In instantiation of boost::circular_buffer<int, std::allocator<int> >: main.cpp:11: instantiated from here ../../../boost/boost_1_36_0/boost/circular_buffer/base.hpp:379: warning: type qualifiers ignored on function return type ../../../boost/boost_1_36_0/boost/circular_buffer/base.hpp:417: warning: type qualifiers ignored on function return type ../../../boost/boost_1_36_0/boost/circular_buffer/base.hpp:471: warning: type qualifiers ignored on function return type ../../../boost/boost_1_36_0/boost/circular_buffer/base.hpp:489: warning: type qualifiers ignored on function return type g++ -o simpletemplate main.o cb.capacity = 5 mcb.capacity(vec) = 3 mcb.capacity(cb) = 0 array.capacity(row) = 3 array.capacity(col) = 5
En fait j'aurais deux questions :
1) Ca veut dire quoi ces warnings?
2) Quelqu'un peut-il m'expliquer pourquoi ce que je cherche à faire ne fonctionne pas?
Merci d'avance!
Partager