Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le compilateur c++ ne veut pas me compiler ça

mais le compilo C le compile...

Sujet résolu
    23 juin 2008 à 12:56:35

    Bonjour !
    J'ai une fonction que j'ai codé en C. Elle marche bien, et tout ,et tout...
    Mais je veux l'adapter pour QT, donc, je compile avec le compilateur C++
    Et voila qu'il me sort une erreur :
    FenRecherche.cpp: In member function `void FenRecherche::scanner(char*, long int*, long int*)':
    FenRecherche.cpp:178: error: invalid conversion from `void*' to `stat*'
    mingw32-make[1]: *** [release/FenRecherche.o] Error 1
    mingw32-make[1]: Leaving directory `D:/fastSearch'
    mingw32-make: *** [release] Error 2

    voici la ligne en question (qui marche en C) :
    struct stat *fichier = malloc(sizeof(struct stat));
    

    Pourquoi cette erreur apparaît ? je ne vois aucune fonction de type void* !
    Merci d'avance pour vos réponses :D
    • Partager sur Facebook
    • Partager sur Twitter
      23 juin 2008 à 13:03:53

      Je crois que malloc() et free() sont à proscrire en C++, utilise l'allocation dynamique avec new et delete.
      • Partager sur Facebook
      • Partager sur Twitter
        23 juin 2008 à 13:06:01

        Citation : M@téo

        new et delete sont des opérateurs, des mots-clé du langage C++. Contrairement à malloc et free, ce ne sont pas des fonctions.
        new et delete font en fait eux-mêmes appel aux fonctions malloc et free (on n'a pas réinventé la roue). Cependant, ils font aussi des tests et des initialisations supplémentaires, ce qui fait qu'on préfèrera toujours utiliser new et delete au lieu de malloc et free. Ils sont plus adaptés en C++.

        Bon je vais essayer avec des new et des delete... :euh:
        • Partager sur Facebook
        • Partager sur Twitter
          23 juin 2008 à 13:16:37

          Sinon tu as tenté de convertir explicitement ? :

          struct stat *fichier = (stat*)malloc(sizeof(struct stat));
          


          • Partager sur Facebook
          • Partager sur Twitter
            23 juin 2008 à 13:45:41

            A ta place je ferais:
            stat * fichier = new stat();

            edit parenthèses
            • Partager sur Facebook
            • Partager sur Twitter
              23 juin 2008 à 14:17:24

              C'est bon ça marche avec les new et les delete !
              Merci !

              Edit:


              Quand j'applique ta technique, ledemonboiteux, j'ai ces erreurs... :euh:
              FenRecherche.cpp: In member function `void FenRecherche::scanner(char*, long in
              *, long int*)':
              FenRecherche.cpp:183: error: `fichier' undeclared (first use this function)
              FenRecherche.cpp:183: error: (Each undeclared identifier is reported only once
              or each function it appears in.)
              FenRecherche.cpp:183: error: `stat' is not a type
              • Partager sur Facebook
              • Partager sur Twitter
                23 juin 2008 à 14:40:33

                stat * fichier = new stat;
                

                pas de parenthèses.

                Assures-toi que la struct stat est bien déclarée. ou que le fichier d'entête soit inclus.
                • Partager sur Facebook
                • Partager sur Twitter
                  23 juin 2008 à 14:57:13

                  ...non toujours la même erreur
                  ou alors ça marche comme ça :
                  struct stat *fichier;
                  fichier = new struct stat;
                  

                  Mais après on retrouve ce ***************************** de problème
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le compilateur c++ ne veut pas me compiler ça

                  × 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