Salut à toutes et à tous !

Honte à moi, je ne comprends pas ce qui se passe dans la boucle for suivante : la boucle n'effectue que la première itération (le reste, mystère) et la suite du code s'exécute normalement.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
         unsigned int time = 1;
         unsigned id = 0;
         int x =1;
 
         for(int y = 1; y < 4; y++){
                auto coords = make_pair(x, y);
		std::cout << "in loop :" << environment(id, coords, time) << std::endl;
	}
 
	std::cout << "in main : " << environment(id, std::make_pair(x, 1), time) << std::endl;
	std::cout << "in main : " << environment(id, std::make_pair(x, 2), time) << std::endl;
	std::cout << "in main : " << environment(id, std::make_pair(x, 3), time) << std::endl;
Qu'est ce qui peut faire que l'itération "manuelle" réussisse quand la boucle for plante (sans vraiment planter d'ailleurs...) ?

environnement est un objet qui implémente l'opérateur () : il trouve un jeu de donnée dans une map et délègue la lecture au jeu de donnée en question qui implémente l'opérateur () suivant (implémentation suspicieuse : forcément, visez qui l'a écrit ) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
	value_type operator()(coord_type p, time_type t) const {
		GDALRasterBand  *poBand = resource->GetRasterBand( int(t) );
		if(!poBand)
			throw std::string("unable to access band");
 
		float *val;
		int x = p.first;
		int y = p.second;
		poBand->RasterIO( GF_Read, x, y, 1, 1, val, 1, 1, GDT_Float32, 0, 0 );
		if(!val)
			throw std::string("unable to read data");
 
		return double(*val);
	}
J'essaie de mon mieux, mais oui c'est crado, l'utilisation de l'API de GDAL ne m'aidant malheureusement pas !
Merci !