Bonjour à tous,

Je viens vers vous car je pense avoir un petit problème d'itérateurs concernant un simple wrapper de std::vector.

Typiquement, voici ma classe :
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
template<typename T>
	class vector {
	public:
		using iterator = typename std::vector<T>::iterator;
		using const_iterator = typename std::vector<T>::const_iterator;
	private:
		std::vector<T> data;
 
	public:
		vector(size_t const count);
		vector(size_t const count, T const & val);
 
		size_t size() const { return data.size(); };
 
		T & operator[](size_t const id);
		T const & operator[](size_t const id) const;
 
		iterator begin() { return data.begin(); };
		iterator end() { return data.end(); };
		const_iterator cbegin() const { return data.cbegin(); };
		const_iterator cend() const { return data.cend(); };
 
		void push(T const & val);
		void pop();
		void clear();
 
 
		// OPERATORS
		vector<T> & operator=(vector<T> const & src);
		vector<T> & operator=(T const & src);
 
		vector<T> & operator+=(vector<T> const & src);
		vector<T> & operator+=(T const & src);
 
		vector<T> & operator-=(vector<T> const & src);
		vector<T> & operator-=(T const & src);
 
		vector<T> & operator*=(vector<T> const & src);
		vector<T> & operator*=(T const & src);
 
		vector<T> & operator/=(vector<T> const & src);
		vector<T> & operator/=(T const & src);
 
		bool operator==(vector<T> const & src) const;
		bool operator!=(vector<T> const & src) const;
 
 
	};
Cependant, lorsque je tente de l'utiliser avec des "range-based for loops" en const ça bug :
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
24
// ceci ne compile pas
template<typename T>
void list(slm::vector<T> const & src) {
	for(auto & v:src) {
		std::cout << v << ' ';
	}
	std::cout << '\n';
}
// alors que ceci oui...
template<typename T>
void list(std::vector<T> const & src) {
	for(auto & v:src) {
		std::cout << v << ' ';
	}
	std::cout << '\n';
}
// et ceci aussi
template<typename T>
void list(slm::vector<T> & src) {
	for(auto & v:src) {
		std::cout << v << ' ';
	}
	std::cout << '\n';
}
Message de g++ :
error: passing ‘const slm::vector<float>’ as ‘this’ argument discards qualifiers [-fpermissive]
for(auto & v:src) {
Une idée de ce que je dois apporter à mon code ?

Merci d'avance !