IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Erreur de référence dans un template


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Points : 30
    Points
    30
    Par défaut Erreur de référence dans un template
    Bonjour,

    Je débute le C++. En reprenant un exemple du livre de Pearson avec quelques modifications (nom des labels essentiellement, j'obtiens le message d'erreur suivant avec Visual Studio Community 2017:

    Error	C3867	'std::vector<student,std::allocator<_Ty>>::capacity': non-standard syntax; use '&' to create a pointer to member
    Malheureusement, je n'ai pas encore les aptitudes à débugger sous Visual Studio. Pouvez-s'il vous plaît m'aider ? (fichier complet en pièce jointe)

    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
     
    //display vector properties
    template<class T> void display_vector(const std::vector<T>& v);
     
    int main()
    {
    ...
    }
     
    template<class T> void display_vector(const std::vector<T>& v)
    {
    	std::cout << "max_size() = " << v.max_size() << "\tsize() = " << v.size() << "\tcapacity() = " << v.capacity << "\t" << (v.empty()? "empty": "not empty") << std::endl;
     
    	for (unsigned int i = 0; i < v.size(); i++)
    		std::cout << v[i] << std::endl;
     
    	std::cout << std::endl;
    }
    Merci par avance !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Le compilateur dit qu'il faut utiliser & pour récupérer la valeur de la fonction membre capacity. Or tu veux l'appeler et il te manque les parenthèses pour le faire: v.capacity().

    2 choses concernant la boucle:

    - v.size() retourne un std::size_t, pas un unsigned int.
    - il est préférable d'utiliser les boucles sur intervalle: for (T const& x : v) std::cout << x << std::endl;

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Points : 30
    Points
    30
    Par défaut
    Merci pour ce retour, j'avais effectivement oublié les () après la méthode capacity, j'ai aussi changé l'itération dans la bouble en ++i et 2 ou 3 autres p'tites choses dans le code sans trop d'importance.

    Merci pour l'optimisation des boucles, mais à vrai dire je débute

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo