Partage
  • Partager sur Facebook
  • Partager sur Twitter

Include et headers

je ne comprends vraiment pas ...

Sujet résolu
    20 novembre 2007 à 23:04:01

    Bonsoir,
    Donc voilà j'ai un problème (très) embêtant. Depuis peu je me suis mis a faire du C++ avec CodeBlocks sur XP. Je me suis rendu compte que les headers était "étrange".
    Je m'explique je créé un projet SDL : un morpion par exemple.
    J'inclue SDL , iostream ,string ,fstream , SDL_ttf et des headers au début de la main.
    LE problème est si je veux écrire ou lire un txt (fstream) et que cette fonction est écrit dans un header la compilation plante (undeclared et compagnie).
    Idem avec ttf de la SDL.
    Comme si fstream et ttf n'était pas inclue dans le header.

    Exemple:

    main.c :

    1. #include <iostream>
    2. #include <SDL/SDL.h>
    3. #include <string>
    4. #include <fstream>
    5. #include "init.h"
    6. #include <SDL/SDL_ttf.h>
    7. using namespace std;
    8. int main ( int argc, char** argv )
    9. {
    10.    SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER);
    11.    int tableau [3][10] = {0};
    12. init (tableau);
    13. return 0;
    14. }



    header init :

    1. void init (int tableau [][10])
    2. {
    3. char contenu [31] = {0};
    4. FILE* fichier = NULL;
    5. fichier = fopen("niveau.txt", "r");
    6. fgets(contenu, 31, fichier);
    7. for (int i = 0 ; i < 3 ; i++)
    8.     {
    9.         for (int j = 0 ; j < 10 ; j++)
    10.         {
    11.             switch (contenu[(i * 10) + j])
    12.             {
    13.                 case '0':
    14.                     tableau[i][j] = 0;
    15.                     break;
    16.                 case '1':
    17.                     tableau[i][j] = 1;
    18.                     break;
    19.             }
    20.         }
    21.     }
    22. fclose(fichier);
    23. }


    J'ai ici utilisé la méthode d'écriture dans un fichier en C mais, le résultat est le même qu'en C++.
    Voilà j'espère que vous pouvez m'aider ;)
    Parce que c'est vraiment embêtant d'avoir tout ce qui concerne la manipulation de fichiers et ecriture en SDL dans la main :(
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      20 novembre 2007 à 23:19:02

      Quand tu fais un include, les types (que ce soit fstream, string, ...) et les fonctions contenu dans celui ci sont disponible QUE pour le fichier dans lequel on fait cet include.
      Donc si dans un fichier "main.cpp" tu désires utiliser la SDL tu vas devoir inclure les header "SDL.h". Idem si tu veux pouvoir avoir accès à ces mêmes fonctions dans un autre fichier source (tu refais l'include).

      Deux commentaires :
      -Tu ne prends pas de précaution contre les inclusions multiples du même header dans le même fichier source (regarde du côté des commande préprocesseur tel que #ifndef et #define).
      -Dans un header on ne donne que la signature d'une fonction (c'est une sorte de convention), le code de cette fonction est placé dans un fichier source.
      • Partager sur Facebook
      • Partager sur Twitter
        20 novembre 2007 à 23:46:50

        Merci pour ta réponse, j'ai essayé mais le problème persiste.
        exemple avec un code simple:

        1. #include <iostream>
        2. #include <string>
        3. #include "chaine.h"
        4. using namespace std;
        5. int main()
        6. {
        7. bool pareil = true;
        8.         chaine ();
        9.         cout<<"pareil vaut"<<pareil<<endl;
        10.         return 0;
        11. }


        headers chaine :

        1. #if !defined(_H_DEFINED)
        2. #define _H_DEFINED 1
        3. #include <iostream>
        4. #include <string>
        5. int chaine ()
        6. {
        7. string maChaine = "bonjour";
        8. string chaine2 = "bonjour";
        9. if (maChaine == chaine2)
        10. return 1;
        11. else
        12.  return 0;
        13. }
        14. #endif


        J'ai vérifié plusieurs fois, mon projet est bien en C++ et j'ai déjà réinstallé codeblocks , sans succès.
        • Partager sur Facebook
        • Partager sur Twitter
          21 novembre 2007 à 0:46:05

          hm :

          chaine.h :

          1. #ifndef MON_DEFINE_DE_CHAINE
          2. #define MON_DEFINE_DE_CHAINE
          3. #include <iostream>
          4. #include <string>
          5. int chaine ();
          6. #endif


          chaine.cpp (à mettre dans le meme dossier que chaine.h) :

          1. #include "chaine.h"
          2. int chaine ()
          3. {
          4. string maChaine = "bonjour";
          5. string chaine2 = "bonjour";
          6. if (maChaine == chaine2)
          7. return 1;
          8. else
          9.  return 0;
          10. }


          c'est tout, et si ça compile pas, le prob viens pas du code source ^^
          • Partager sur Facebook
          • Partager sur Twitter
          Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
            21 novembre 2007 à 13:55:14

            Je te remercie c'était sa !
            Je ne m'étais JAMAIS servi de plusieurs .cpp.
            C'est très pratique et UTILE en fait.
            Encore merci à vous 2 pour vos réponses.
            • Partager sur Facebook
            • Partager sur Twitter

            Include et headers

            × 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