C++ #14 - espaces de noms

แชร์
ฝัง
  • เผยแพร่เมื่อ 3 ก.พ. 2025

ความคิดเห็น • 28

  • @franckmekoulou4314
    @franckmekoulou4314 2 ปีที่แล้ว +4

    je pensais qu'on allait jamais traiter cette notion, au moins ça s'était plus clair...
    je visionnaire la vidéo à 3h pour être top ,
    merci de traiter les espaces de nom , Jason

    • @formation-video
      @formation-video  2 ปีที่แล้ว +1

      De rien, bon visionnage en avance 😉

  • @aya6143
    @aya6143 2 ปีที่แล้ว +4

    Top !!! J’ai commencé avec Python, puis du C, et C++ c’est vraiment mon languages préféré, merci pour tout !!!

    • @formation-video
      @formation-video  2 ปีที่แล้ว +1

      Bon courage en programmation, et bonne journée à toi 😉

  • @jpc5311
    @jpc5311 ปีที่แล้ว

    Excellent ! J ' aime bien cette formation , elle est très bien expliquée ! Merci pour tout!!!

  • @Chxreza
    @Chxreza 2 ปีที่แล้ว +4

    j'aime tes videos :)

  • @ethernan9258
    @ethernan9258 ปีที่แล้ว

    Bonjour,
    Il y a une petite erreur, me semble-t-il. La déclaration (en 25:40) :
    using TLNN = TooLongNamespaceName;
    est invalide, car cette forme de déclaration attend un TYPE de données, comme tu le fais (en 26:03) lorsque tu déclares :
    using entier = int;
    int est bien un TYPE de données.
    Ceci dit, je me pose une question. J'ai fort bien compris que, dans la mesure du possible, il fallait s'affranchir d'utilser le 'using namespace' afin de prévoir tout conflit de noms. Dans ce cas, quel est l'intérêt d'utiliser ce dernier ?
    Merci beaucoup pour tout.
    A bientôt

    • @formation-video
      @formation-video  ปีที่แล้ว

      Bonjour, c'était pour montrer avec ce que l'on avait vu précédemment, mais pour les espaces de nom, on fait un alias avec l'autre syntaxe montrée : namespace TLNN = TooLongNamespaceName;
      On évite l'usage du "using namespace" surtout dans une portée globale. Dans une portée locale, cela ne pose pas de problèmes, et on le fait assez régulièrement, notamment pour utiliser de vraies chaînes de caractères.

  • @greenpenguin9846
    @greenpenguin9846 2 ปีที่แล้ว

    Top 👍

  • @aliboulgsoa596
    @aliboulgsoa596 11 หลายเดือนก่อน

    merci c'et top

  • @laurentzimmermann1406
    @laurentzimmermann1406 2 หลายเดือนก่อน

    Bonjour,
    Je bute sur un problème que je n'arrive pas à résoudre.
    Dans util.hpp, j'ai défini "namespace Util{}" à l'intérieur duquel j'ai défini "bool string;" et que je n'utilise nulle part.
    J'ai une erreur lors du link : "définitions multiples de Util::string".
    J'avais cru comprendre que std::string et Util::string ne seraient pas en conflit.
    Je n'utilise nulle part "using namespace std" ;)
    J'ai loupé quelque chose ?

    • @formation-video
      @formation-video  2 หลายเดือนก่อน

      Bonjour, cette erreur indique que le compilateur trouve plusieurs définitions de la classe Util (ça doit venir de tes inclusions)

    • @laurentzimmermann1406
      @laurentzimmermann1406 2 หลายเดือนก่อน

      @@formation-video Je ne trouve vraiment pas.
      J'ai réduit les sources ci-dessous le plus possible.
      ===== util.hpp =====
      #ifndef UTIL_HPP_INCLUDED
      #define UTIL_HPP_INCLUDED
      void test();
      namespace Util
      {
      bool string;
      }
      #endif
      ===== util.cpp =====
      #include "util.hpp"
      void test()
      {
      Util::string = true;
      }
      ===== main.cpp =====
      #include "util.hpp"
      int main(void)
      {
      test();
      return 0;
      }
      Merci pour votre attention.

    • @formation-video
      @formation-video  2 หลายเดือนก่อน

      Ah, je comprends mieux, cela vient de ta ligne bool string; dans l'espace de nom.
      Comme il s'agit d'une déclaration de variable et que tu inclues ton fichier d'entête à plusieurs moments, on a donc une définition multiple de celle-ci. Il aurait donc fallu la placer dans une classe, par exemple.
      Sinon, tu voulais vraiment garder cela comme tel, deux possibilités que je vois :
      1. Faire précéder la déclaration du mot-clé « extern », si la variable doit être déclarée dans ailleurs (dans un fichier source, globale et modifiable)
      2. Faire précéder la déclaration avec « inline » pour en faire une constante "en ligne".
      Par exemple, ceci : pastebin.com/hxXBcPfT

    • @laurentzimmermann1406
      @laurentzimmermann1406 2 หลายเดือนก่อน

      Merci pour les solutions. L'erreur ne se produit plus.
      Néanmoins, j'essaie toujours de comprendre le processus qui conduit à cette erreur.
      1. D'abord, il y a sans doute une mauvaise compréhension de ma part quant au fonctionnement des directives #ifndef UTIL_HPP_INCLUDED, #define UTIL_HPP_INCLUDED, #endif. Jusqu'ici je croyais que la portée de UTIL_HPP_INCLUDED défini dans un fichier du projet s'étendait à tout le projet.
      Mais j'ai de plus en plus l'impression que sa portée est au contraire limitée au seul fichier .cpp qui inclut le .hpp concerné (et au contenu des autres fichiers inclus dans ce même .cpp). Est-ce ceci la bonne explication ?
      2. Ensuite, si c'est le cas, je pourrais comprendre une erreur du genre "redéclaration" car "bool string;" serait déclaré deux fois. Mais au lieu de cela, l'erreur est "redéfinition".
      Mais peut-être le linker utilise-t-il un mot pour l'autre ? Ou bien les deux mots sont-ils équivalents quand il s'agit d'une variable ?
      3. Enfin, et surtout, je me demande pourquoi l'erreur ne concerne que la déclaration de la variable ("bool string;") et pas les déclarations de la fonction "void test();" ou encore de "namespace Util{}", de "Util::test()", "Util::SubUtil::test()", comme dans ce .hpp :
      pastebin.com/w2M4cAGx
      Merci pour votre attention.

  • @Jiimko
    @Jiimko 11 หลายเดือนก่อน

    bonjour je suis en train de suivre votre formation car je viens de commencer le codage et je n'arrive pas à réaliser le programme que vous avez fait à 19min, ça me dit main.cpp: In function 'int main()':
    main.cpp:11:5: error: 'test' was not declared in this scope; did you mean 'Util::test'?
    11 | test();
    | ^~~~
    | Util::test
    In file included from main.cpp:1:
    util.hpp:9:14: note: 'Util::test' declared here
    9 | void test(); // Util::test()
    | ^~~~
    est-ce que vous pouvez m'aider s'il vous plait. Merci d'avance et bonne continuation pour vos vidéos

    • @formation-video
      @formation-video  11 หลายเดือนก่อน +1

      Bonjour, le compilateur indique que tu as fait une erreur, et suggère d'écrire plutôt Util::test(), ce qui est à faire si ta fonction test() est dans l'espace de noms "Util" 👍

    • @Jiimko
      @Jiimko 11 หลายเดือนก่อน

      Oui mais c'est pour réaliser la fonction void test( )
      {
      std::cout

    • @formation-video
      @formation-video  11 หลายเดือนก่อน

      Si ta fonction test() est définie dans un espace de noms "Util", tu dois effectivement l'appeler avec Util::test(). Sinon, il faut définir cette fonction en dehors de toute espace de nom, si tu veux qu'elle fasse partie de l'espace global, avec un simple appel en faisant test() : pastebin.com/4TLfnTnw

    • @Jiimko
      @Jiimko 11 หลายเดือนก่อน

      ok merci@@formation-video

    • @formation-video
      @formation-video  11 หลายเดือนก่อน

      👍

  • @Qhor
    @Qhor 2 ปีที่แล้ว +1

    Parfait je savait pas pour les espace anonyme nickel le static c’était pas terrible

    • @formation-video
      @formation-video  2 ปีที่แล้ว +1

      Oui, on a de quoi remplacer tout ça 😉

  • @tigidou3344
    @tigidou3344 ปีที่แล้ว

    Pas du tout d'accord avec le fait de conseiller de ne pas mettre le "using namspace". Si tu ne sais pas l'environnement du code que tu es en train de taper, mieux vaut abandonner la programmation.

    • @formation-video
      @formation-video  ปีที่แล้ว +2

      Pourtant, cela fait partie des bonnes habitudes à avoir, de ne pas masquer les espaces de nom, et d'éviter (surtout) les conflits dans le code (je parle du cas précis de mettre un "using namespace" dans une portée globale, en local, c'est autre chose).
      Et non, tu ne sais pas toujours de quoi est composé l'entièreté d'un environnement et des projets rattachés, surtout quand tu bosses en équipe. Tu n'as généralement pas accès à l'ensemble du code, l'ensemble des projets et applications.