Bonjour, bon j'ai un petit soucis avec les iterator.
C'est simple, j'ai une classe var_test et une classe sub_var qui dérive
de var_test. Elles redéfinissent toutes les deux une fonction void
eval();
var_test t1(4); // donc je définie deux objets
sub_test t2(2);
std::list < var_test*> liste;
liste.push_back(&t1);
liste.push_back(&t2);
std::list< var_test* >::const_iterator it;
it = liste.begin();
(*it)->eval();
it = liste.end();
(*it)->eval(); // <== PLANTE !
liste.back()->eval();
liste.front()->eval(); // <== AUCUN problème et pourtant a priori c'est le meme objet
// que (*it)
juste au dessus.
Je comprend pas. Voici les class vraiment très simples c'était juste pour tester.
class var_test
{
public:
var_test() { this->n = 0; }
var_test(int _c) { this->n = _c;}
var_test(const var_test & _which) { this->n = _which.n; }
virtual ~var_test() {}
virtual void
eval() { std::cout << "BASE" << this->n <<
std::endl; }
protected:
int n;
};
class sub_test : public var_test
{
public:
sub_test() {this->n = 0; }
sub_test(int _n) { this->n = _n; }
sub_test(const sub_test & _which) { this->n = _which.n; }
virtual ~sub_test() {}
virtual void eval() { std::cout << "SUB" << 4*this->n << std::endl;}
};