Je prends une classe C++ et je n'arrive pas à trouver l'une des devoirs. On nous donne la classe suivante (que j'ai ajoutée à mon fichier .h, et on nous a dit de ne pas modifier), et on nous a dit d'implémenter la classe itérateur.Instancier un objet modèle dans un modèle
template <typename T>
class IntegerRange
{
public:
class iterator;
IntegerRange(T low, T high) : low_(low), high_(high)
{
assert(low <= high);
}
const iterator begin() const {return iterator(low_); }
const iterator end() const {return iterator(high_); }
private:
const T low_, high_;
};
On nous a donné les éléments suivants d'une façon dont il serait utilisé:
IntegerRange<int> r1(-2, 3);
copy(r1.begin(), r1.end(), ostream_iterator<int>(cout, " ")); //-2 -1 0 1 2
IntegerRange<unsigned> r2(0, 6);
copy(r2.begin(), r2.end(), ostream_iterator<unsigned>(cout, " ")); //0 1 2 3 4 5
Pour commencer, je viens d'essayer d'obtenir le code pour compiler afin que je puisse jouer avec et comprendre dehors, mais j'ai du mal avec même cela. J'ai ajouté le code suivant dans le même fichier .h, mais je reçois l'erreur « Implicit instanciation de membre non défini « IntegerRange :: iterator » »
template <typename T>
class iterator
{
public:
iterator(T data) : data_(data) {}
private:
T data_;
};
Je ne cherche pas d'avoir quelqu'un me dire comment faire l'ensemble de la mission - je me demandais comment je peux même le compiler? Merci! La pleine MAIN.CPP & fichiers IntegerRange.h ci-dessous:
//main.cpp
#include <iostream>
#include "IntegerRange.h"
#include <algorithm>
using std::copy;
using std::cout;
using std::ostream_iterator;
int main()
{
IntegerRange<int> r1(-2, 3);
copy(r1.begin(), r1.end(), ostream_iterator<int>(cout, " ")); //-2 -1 0 1 2
IntegerRange<unsigned> r2(0, 6);
copy(r2.begin(), r2.end(), ostream_iterator<unsigned>(cout, " ")); //0 1 2 3 4 5
return 0;
}
//IntegerRange
#ifndef Homework7_IntegerRange_h
#define Homework7_IntegerRange_h
#include <cassert>
template <typename T>
class iterator
{
public:
iterator(T data) : data_(data) {}
private:
T data_;
};
template <typename T>
class IntegerRange
{
public:
class iterator;
IntegerRange(T low, T high) : low_(low), high_(high)
{
assert(low <= high);
}
const iterator begin() const {return iterator(low_); }
const iterator end() const {return iterator(high_); }
private:
const T low_, high_;
};
#endif
Désolé, aurait dû mentionner, l'attribution spécifiée que nous ne devrions pas modifier la définition de la classe IntegerRange – Brian