Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur C2664

problème de conversion entre des paramètres dans le lambda

    4 août 2020 à 12:26:32

    Bonjour! 

    J'ai un devoir à rendre en Cpp mais n'arrive pas à corriger une erreur de compiler.

    Le devoir est le suivant:

    créer une fonction count_if qui reçoit 3 paramètres:

    a) un iterator qui pointe vers le début d'un vecteur STL

    b) un autre iterator qui pointe vers la fin d'un vecteur STL

    c) une fonction lambda qui prend deux chiffres est les compare (rend true si y est plus grand que x)

    le but de count_if et de prend un chiffre au hasard (chk) du vecteur et voir combien de termes dans le vecteur sont plus grand que chk.

    voici le code écrit présent

    #include<iostream>
    #include<vector>
    #include <ctime>
    using namespace std;
    template<typename T>
    int count_if(vector<int>::iterator b, vector<int>::iterator e, T l )
    {
       srand(unsigned (time(NULL)));                                          
       int chk = b+rand()%5, sum = 0;
       for (int i = b; i != e; i++) {
          if (l(chk,i) == true)
              sum++;
         }
       return sum;
    }
    
    
    int main()
    {
       vector<int> a;
       vector<int>::iterator it_strt;
       vector<int>::iterator it_end;
       it_strt = a.begin(); 
    
       it_end = a.end();
    
       for (int i = 0; i < 5; i++)
            a.push_back(i + 1);
       int r = count_if(it_strt, it_end, [](int c, int x) {return x > c; });
       cout << "sum is " << r;
    }



    Mais mon programme me donne cette erreur:

    ErrorC2664'bool main::<lambda_5f442428e0f3b024da69edd7481ad230>::operator ()(int,int) const': cannot convert argument 2 from 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>' to 'int'


    en mode a la ligne 13 on a un probleme de conversion au niveau du deuxième paramètre.

    Help svp?

    -
    Edité par NessyaNakache 4 août 2020 à 16:13:26

    • Partager sur Facebook
    • Partager sur Twitter
      4 août 2020 à 14:36:15

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        4 août 2020 à 14:59:11

        Salut ! Je ne vois pas qu'une seule erreur moi. Et le compilo non-plus. D'après ce que je vois, la conversion implicite d'un iterator vers un int n'est pas appréciée. Il ne faut pas mélanger deux types de donnée différents, soit on utilise des itérateurs, soit un système avec index.
        • Partager sur Facebook
        • Partager sur Twitter
          4 août 2020 à 15:52:05

          Je pense que tu as confondu la valeur vers laquelle l'itérateur pointe, et la valeur de l'itérateur.
          Sauf qu'un itérateur n'a pas de valeur proprement dite, il représente une position.

          • Partager sur Facebook
          • Partager sur Twitter
            4 août 2020 à 16:15:03

            ah daccord je vois...

            n'uarait-t-il pas un moyen d'extraire la valeur de l'iterator?

            • Partager sur Facebook
            • Partager sur Twitter
              4 août 2020 à 16:26:40

              https://en.cppreference.com/w/cpp/iterator/iterator:

              template<typename ContainedType>
              using iterator_value = std::vector<ContainedType>::iterator::pointer;

              Ça semble être valide. (?) Mais attention aux conversions de pointeurs en int.

              -
              Edité par Daimyo_ 4 août 2020 à 16:32:28

              • Partager sur Facebook
              • Partager sur Twitter
                4 août 2020 à 23:03:05

                NessyaNakache a écrit:

                n'uarait-t-il pas un moyen d'extraire la valeur de l'iterator?

                Pour demander à un iterator ce qu'il désigne c'est comme demander à un pointeur ce qu'il pointe, on place une étoile devant.
                Mais je n'ai pas compris pourquoi il y a des choses aléatoires dans la fonction count_if.

                • Partager sur Facebook
                • Partager sur Twitter

                En recherche d'emploi.

                Erreur C2664

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown