erreur: il n'y a pas d'arguments à 'à' qui dépendent d'un paramètre du modèle, si une déclaration d'au doivent être disponibles

Noob ici,

Je suis en train de compiler ce segment de code à partir de Bjarne Stroustrup " Le Langage de Programmation C++", mais CodeBlocks garde en me jetant à cette erreur.

Le code est sur le contrôle de la portée d'un tableau tenu à un vecteur de fonction.

Voici le code:

#include <iostream>
#include <vector>
#include <array>

using namespace std;

int i = 1000;

template<class T> class Vec : public vector<T>
{
public:
    Vec() : vector<T>() { }

    T& operator[] (int i) {return at(i); }
    const T& operator[] (int i) const {return at(i); }
    //The at() operation is a vector subscript operation 
    //that throws an exception of type out_of_range
    //if its argument is out of the vector's range.
};

Vec<Entry> phone_book(1000);

int main()
{

    return 0;
}

Les erreurs renvoyées sont les suivantes:

  • il n'y a pas d'arguments à 'à' qui dépendent d'un paramètre du modèle, donc une déclaration de 'a' doit être disponible
  • note: si vous utilisez l'option '-fpermissive', G++ accepte votre code, mais en permettant l'utilisation d'un non déclaré nom est obsolète
  • En fonction de membre de 'const T& operator[] (int i) const':
  • il n'y a pas d'arguments à 'à' qui dépendent d'un paramètre du modèle, donc une déclaration de 'a' doit être disponible
  • "Entrée" n'a pas été déclarée dans ce cadre
  • modèle de l'argument 1 est invalide
  • de type non valide dans la déclaration avant '(' token

Quelqu'un peut-il m'expliquer cela?

Aussi, comment pourrais-je mettre en œuvre ce que si je devais pas utiliser " using namespace std;'

Lorsque vous héritez de conteneurs stl, vous devez être conscient qu'ils n'ont pas un destructeur virtuel. Cela peut entraîner des problèmes lors de votre sous-classe acquiert des ressources qui devraient être libérés dans son destructeur.
La dernière question est triviale: soit écrire std:: en face de chaque nom qui est venu de namespace std, par exemple, écrire std::vector partout, OU d'écrire using std::vector une fois (au Lieu de namespace, juste la liste de tous les noms que vous utilisez)

OriginalL'auteur Bernardo Pliego-Garcia | 2015-04-01