Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème extern et hpp

    24 mai 2022 à 19:13:32

     Salut a tous !

    J'espère que vous allez bien

    En fait, je mets une variable dans mon fichier main.cpp et ensuite je mets extern type variable dans mon main.hpp

    Les autres fichiers C++ doivent pouvoir accéder a cette variable

    Code:

    main.cpp:


    //main.cpp #include "main.hpp" //Namespaces using namespace std; string username;

     main.hpp:

    #ifndef MAIN_HPP_INCLUDED
    #define MAIN_HPP_INCLUDED
    
    //Includes
    //main.hpp
    
    #include <iostream>
    #include <unistd.h>
    #include <fstream>
    #include <string>
    #include <ncurses.h>
    #include "alias.hpp"
    #include "unalias.hpp"
    
    //Variable username
    extern std::string username;
    
    
    
    #endif // MAIN_HPP_INCLUDED

     unalias.cpp:

    //unalias.cpp
    
    #include "unalias.hpp"
    #include "main.hpp"
    
    //Namespaces
    using namespace std;
    
    //Variables globales
    int choice;
    std::string lst;
    int getalias = 30;
    std::string command_to_erase;
    
    
    
    
    //Déclaration de fichiers
    
    fstream list_of_aliases_unalias("../aliases_created/list_of_aliases.txt", ios::app);
    fstream modifyBashrc_unalias("/home/" + username + "/.bashrc", ios::app);
    ifstream list_of_aliases_reading_unalias("../aliases_created/list_of_aliases.txt", ios::app);

    Si vous n'avez pas trop compris, je vous explique:

    en fait je ne peux pas créer une var username dans mon unalias.cpp car dans celle de mon main.cpp, il contient le nom d'utlisateur déja rentré avec cin >>.

    J'aimerais juste que quand elle soit de type extern, le fichier unalias.cpp puisse y accéder

    si vous voulez mon erreur de compilation:

    unalias.cpp:19:41: error: ‘username’ was not declared in this scope
       19 | fstream modifyBashrc_unalias("/home/" + username + "/.bashrc", ios::app);

    Merci !

    (Si vous n'avez tjrs pas compris redemandez moi)



    -
    Edité par MathiasRubert 24 mai 2022 à 19:18:05

    • Partager sur Facebook
    • Partager sur Twitter
      24 mai 2022 à 20:19:55

      Bonjour,

      Utiliser des globales est une très mauvaise idée, mais ici ça devrait marcher à moins que tu n'aies des includes qui s'inter-utilisent (du genre main.hpp inclut unalias.hpp et unalias.hpp inclut main.hpp, qui est impossible).

      D'ailleurs il y a beaucoup trop d'includes dans ton main.hpp. Chaque fichier ne doit inclure que ce dont il a besoin, ton main.hpp devrait être:

      #ifndef MAIN_HPP_INCLUDED
      #define MAIN_HPP_INCLUDED
      
      #include <string>  // ce fichier utilise std::string et rien d'autre
      
      //Variable username
      extern std::string username;
      
      #endif // MAIN_HPP_INCLUDED
      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        25 mai 2022 à 1:38:56

        -

        -
        Edité par PierrotLeFou 25 mai 2022 à 1:40:22

        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          25 mai 2022 à 9:59:49

          Je suppose que le fichier main.cpp est le fichier qui contient la fonction main. Pour moi, ce fichier n'a pas besoin d'un fichier entête associé.

          Les fichiers entête doivent servir aux déclaration des autres fichiers sources ou bibliothèque que l'on utilisera. Mais le fichier main.cpp ne sera en principe pas utilisé par d'autre fichier cpp.

          Autrement pour l'erreur que tu cites, je ne vois pas, car d'après ta description ça devrait fonctionner.

          • Partager sur Facebook
          • Partager sur Twitter

          Problème extern et hpp

          × 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