Partage
  • Partager sur Facebook
  • Partager sur Twitter

Timer

Implémentation ou stupidité ?

Sujet résolu
    31 octobre 2018 à 20:13:42

    Bonjour à tous.

    J'ai voulue utiliser un code écrit par le youtuber Cherno, qui permet de connaître le 

    temps d'execution d'une fonction. Très simplement, la fonction crée un objet dont le constructeur

    met en route une horloge, que son destructeur arrête. On récupère la différence entre les deux temps

    et le tour est joué.

    Voici le code :

    struct Timer
    {
         std::chrono::time_point<std::chrono::steady_clock> start, end;
         std::chrono::duration<float> duration;
    
         Timer() : start (std::chrono::high_resolution_clock::now()) {}
         
         ~Timer()
         {
              end_ = std::chrono::high_resolution_clock::now();
              duration = end_ - start;
              float ms = duration.count() * 1000.0f;
              std::cout << "Timer took " << ms << "ms";
         }
    };
    

    Et voici les erreurs : 

    -tout d'abord le compileur ne trouve pas la fonction std::chrono::high_resolution_clock::now()

    -ensuite, il ne trouve pas d'opérateur " = " pour end_ = ...

    Je fais appel exactement à la même fonction deux fois, mais le compileur ne trouve pas la fonction au

    premier appel, et me dit au second que le type de retour de cette fonction ne correspond pas. !?

    Je vous donnes les messages d'erreur, mais ils sont incroyablement long : 

    error: no matching function for call to :

    std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >::time_point(std::chrono::_V2::system_clock::time_point)

    error: no match for operator= :

    operand types are :

    std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >

    and

    std::chrono::_V2::system_clock::time_point {aka std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >})

    Désolé pour la longue question. Le problème vient sûrement du compileur : Cherno est sur Visual studio et j'ai fait ça sur Code::Blocks

    (mon compileur est GCC 8.1.0).

    Mais si quelqu'un à une réponse plus précise, je suis preneur !

    PS : j'ai tapé le même code sur Visual Studio, et il marche. C'est donc un problème de compileur.

    -
    Edité par clementboutaric 1 novembre 2018 à 10:42:41

    • Partager sur Facebook
    • Partager sur Twitter
      1 novembre 2018 à 19:49:00

      Salut :)

      il doit probablement te manquer une librairie sur codeblocks. Je pense que boost doit te manquer.

      Visual Studio est souvent beaucoup plus complet j'ai l'impression, surtout les versions actuelles et tu as une interface d'installation de bibliothèques

      Si ce n'est pas le cas, c'est on chemin d'include qui doit être modifié.

      Regarde aussi tes en-têtes pour le pré-processing. As-tu mis les bons ?

      • Partager sur Facebook
      • Partager sur Twitter
        1 novembre 2018 à 20:23:12

        > il doit probablement te manquer une librairie sur codeblocks. Je pense que boost doit te manquer.

        Il faudra m'expliquer d'où sort cette affirmation avec un code sans référence à boost.
        Cette histoire de bibliothèque manquante sur C::B laisse aussi penser que le système d'include et d'édition de lien ne sont pas comprit. Franchement, revois les bases.

        @clementboutaric: ce n'est pas un problème de compilateur, mais un problème de ton code. std::chrono::high_resolution_clock est généralement un alias pour std::chrono::system_clock ou std::chrono::steady_clock, mais ce n'est pas obligé. Les types de start et end utilise std::chrono::steady_clock, ce qui n'est pas cohérent avec l'initialisation. Il faut en choisir 1 et ne pas faire un mélange entre 2 types. Si cela fonctionne avec msvc, c'est un coup de bol, rien ne dit que sera encore le cas demain.

        Pour end_, c'est un problème de typo -> end, mais tu l'as corrigé si cela compile.

        -
        Edité par jo_link_noir 1 novembre 2018 à 20:25:01

        • Partager sur Facebook
        • Partager sur Twitter
          2 novembre 2018 à 22:29:10

          jo_link_noir

          En effet. Il suffisait d'être cohérent dans les types. Et ça compile gentiment.

          Merci beaucoup.

          • Partager sur Facebook
          • Partager sur Twitter

          Timer

          × 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