Journal Problème avec g++ !

Posté par  (site web personnel, Mastodon) .
Étiquettes :
0
18
avr.
2003
Je sais pas pourquoi, mais g++ n'accepte aucun include sans le ".h". C'est réellement embêtant car toutes les classes pour mon projet d'info font appel à iostream et non à iostream.h

(en plus, il trouve pas string.h)

Comment résoudre ce problème ?
(sous Debian Sarge)

Merci d'avance
  • # Re: Problème avec g++ !

    Posté par  . Évalué à 2.

    Voici un tout petit programme en c++ :

    #include
    #include
    #include
    #include
    int main(int argc,char **argv) {
    printf(strdup(argv[0]));
    std::cout << "perdu"<<std::endl;
    return 0;
    }


    Compile et dis moi ce que tu en penses...

    En fait, quand on passe en C++ les entetes standard de C passe de toto.h à ctoto mais je ne connais pas la limitation au quels entetes et le pourquoi de la chose

    Si ca ne marche pas, as tu installé les fichiers de g++ ? sur mandrake je dois installé un package nommé gcc-cpp.
    Voila....
    • [^] # Re: Problème avec g++ !

      Posté par  (site web personnel) . Évalué à 2.

      Encore une fois templeet a avalé les caractères inférieurs et supérieurs.
      C'est dommage, pour une démo de include, il n'y a plus rien de visible.

      Pourquoi les .h ont-ils disparu à la fin des include?
      Pour faire simple, g++ utilise la nouvelle norme c++ qui nécessite d'utiliser les indicateurs de portée. Ainsi, auparavant, on utilisait cout sans se soucier d'où ça venait. Maintenant, on utilise std::cout pour préciser qu'on utilise la version de la librairie standard.
      Si on veut toujours utiliser une librairie, on peut bien sûr le faire, mais par défaut, on doit toujours préciser l'origine d'une fonction que l'on utilise.
      Les fichiers sans .h proposent donc cette nouvelle norme, que l'on doit respecter si l'on veut que notre code soit utilisable dans 10 ans...
      • [^] # Re: Problème avec g++ !

        Posté par  . Évalué à 2.

        effectivement :

        #include cstring
        #include cstdlib
        #include cstdio
        #include iostream

        oui, stdlib ne doit servir a rien mais c un exemple....
        • [^] # Re: Problème avec g++ !

          Posté par  (site web personnel, Mastodon) . Évalué à 2.

          Merci ! l'exemple marche ! Donc il suffi que je remplace tous mes cout par std::cout ...

          Mes livres CC By-SA : https://ploum.net/livres.html

          • [^] # Re: Problème avec g++ !

            Posté par  (site web personnel) . Évalué à 1.

            Oui, et tous tes cin par std::cin .Voilà.
            • [^] # Re: Problème avec g++ !

              Posté par  (site web personnel) . Évalué à -1.

              mieux :
              faire using std::cout ;
              • [^] # Re: Problème avec g++ !

                Posté par  . Évalué à -1.

                voire meme using namespace std
                • [^] # Re: Problème avec g++ !

                  Posté par  . Évalué à 2.

                  Non justement, pas mieux. L'intéret des namespaces est justement de limiter les conflits entre des objets (au sens large) de même nom. Sous gcc2, le namespace std avait le privilège d'être implicitement utilisé dans tout projet. Si gcc3 a inversé la manoeuvre, il y'a une bonne raison: même std:: se bute parfois à des conflits emm*rdants.

                  Alors d'accord, c'est généralement en essayant de se lier à du code fermé, dans lequel les devs ont fait les gorets, mais ça arrive (je l'ai vu personellement).

                  Alors il est vrai que faire des "using namespace std" dans les fichiers qui ont besoin limite la casse (puisque laisse les fichiers qui n'ont pas besoin de std:: tranquilles). Mais on en a vu tellement qui font carrément le "using namespace" dans un .hh inclus partout... "Parce que comme ça j'ai pas de problèmes de compilation". Autant enlever le -Wall alors, aussi.

                  La bonne habitude à prendre (enfin je cause mais j'ai aussi du mal à la prendre) c'est de n'importer que les symboles dont on a explicitement besoin. Ca évite d'avoir pas mal de merdes quand on se lie à du code "fermé" (et dans la pratique, ca arrive malheureusement souvent).
              • [^] # Re: Problème avec g++ !

                Posté par  (site web personnel) . Évalué à -1.

                Voilà, c'est ça que je cherchait tout à l'heure! Tu lui dit que tu utilises la librairie standard, et il va chercher les fonctions que tu utilises dedans. Seulement l'inconvénient, c'est si tu définit des fonctions qui ont la même signature que la stdlib. Il y a conflit, et ça ne compile pas...
                • [^] # Re: Problème avec g++ !

                  Posté par  (site web personnel) . Évalué à -1.

                  > fonctions qui ont la même signature que la stdlib. Il y a conflit, et ça ne compile pas...
                  et heureusement c'est le principe même du C++
                  • [^] # Re: Problème avec g++ !

                    Posté par  (site web personnel) . Évalué à -1.

                    C'est ce que je me disait aussi, jusqu'à ce que je passe mon programme pour qu'il respecte la nouvelle norme. Et là, super bizarre, avant il compilait, et après non.
                    J'en ai donc conclut qu'il y avait un truc bizarre, du genre: les fonctions des librairies peuvent avoir les mêmes signatures que les fonctions du programme, mais elles ne sont pas prioritaires.
                    Je sait, c'est tordu comme raisonnement, mais 1 jour avant de rendre un projet, et après 8 jours de codage, on ne réfléchit plus trop...
                    Depuis, je ne m'était pas reposé la question...
                    C'est vrai que c'est stupide.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.