Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de Toad...

Chargement d'image...

    17 décembre 2007 à 16:24:58

    Bonjour!

    J'ai un petit problème. Voilà : je programme un petit jeu qui va se nommé Toad Adventureet je suis coincer au tout début! Mon problème, c'est que quand je compile, il me donne toute ces erreurs :

    1. 1 C:\Documents and Settings\Famille\Mes documents\Mes Projets\main.cpp In file included from main.cpp 
    2.  C:\Documents and Settings\Famille\Mes documents\Mes Projets\cToad.cpp In member function `void Toad::SetStop(const char*, const char*, const char*, const char*)': 
    3. 24 C:\Documents and Settings\Famille\Mes documents\Mes Projets\cToad.cpp no match for 'operator=' in '((Toad*)this)->Toad::mToadStop[0] = SDL_LoadBMP_RW(SDL_RWFromFile(bas, ((const char*)"rb")), 1)' 
    4.  note C:\Dev-Cpp\include\SDL\SDL_video.h:88 candidates are: SDL_Surface& SDL_Surface::operator=(const SDL_Surface&) 
    5. 25 C:\Documents and Settings\Famille\Mes documents\Mes Projets\cToad.cpp base operand of `->' has non-pointer type `SDL_Surface' 
    6. 27 C:\Documents and Settings\Famille\Mes documents\Mes Projets\cToad.cpp no match for 'operator=' in '((Toad*)this)->Toad::mToadStop[2] = SDL_LoadBMP_RW(SDL_RWFromFile(droite, ((const char*)"rb")), 1)' 
    7.  note C:\Dev-Cpp\include\SDL\SDL_video.h:88 candidates are: SDL_Surface& SDL_Surface::operator=(const SDL_Surface&) 
    8. 28 C:\Documents and Settings\Famille\Mes documents\Mes Projets\cToad.cpp base operand of `->' has non-pointer type `SDL_Surface' 
    9. 30 C:\Documents and Settings\Famille\Mes documents\Mes Projets\cToad.cpp no match for 'operator=' in '((Toad*)this)->Toad::mToadStop[1] = SDL_LoadBMP_RW(SDL_RWFromFile(haut, ((const char*)"rb")), 1)' 
    10.  note C:\Dev-Cpp\include\SDL\SDL_video.h:88 candidates are: SDL_Surface& SDL_Surface::operator=(const SDL_Surface&) 
    11. 31 C:\Documents and Settings\Famille\Mes documents\Mes Projets\cToad.cpp base operand of `->' has non-pointer type `SDL_Surface' 
    12. 33 C:\Documents and Settings\Famille\Mes documents\Mes Projets\cToad.cpp no match for 'operator=' in '((Toad*)this)->Toad::mToadStop[3] = SDL_LoadBMP_RW(SDL_RWFromFile(gauche, ((const char*)"rb")), 1)' 
    13.  note C:\Dev-Cpp\include\SDL\SDL_video.h:88 candidates are: SDL_Surface& SDL_Surface::operator=(const SDL_Surface&) 
    14. 34 C:\Documents and Settings\Famille\Mes documents\Mes Projets\cToad.cpp base operand of `->' has non-pointer type `SDL_Surface' 
    15.  C:\Documents and Settings\Famille\Mes documents\Mes Projets\Makefile.win [Build Error]  [main.o] Error 1



    Je pense (D'après ce que je vois :p ) que ça viens de mes '='.
    Voici mes codes:


    main.cpp:
    1. #include "cToad.cpp"
    2. #include "system.cpp"
    3. int main(int argc, char *argv[])
    4. {
    5.     SDL_Init(SDL_INIT_VIDEO);
    6.     SDL_Quit();
    7.     return 0;
    8. }


    cToad.cpp:
    1. #include "system.cpp"
    2. class Toad
    3. {
    4.       private:
    5.       SDL_Surface mToadStop[4];
    6.       int mPoads;
    7.       int mNiveau, mSante, mAttaque, mDefense;
    8.       SDL_Rect mPosition;
    9.       public:
    10.       Toad()
    11.       {
    12.             mPoads = 10;
    13.             mNiveau = 1;
    14.             mSante = 12;
    15.             mAttaque = 2;
    16.             mDefense = 1;
    17.       }
    18.       void SetStop(const char *bas, const char *droite, const char *haut, const char *gauche)
    19.       {
    20.            mToadStop[BAS] = SDL_LoadBMP(bas);
    21.            SDL_SetColorKey(mToadStop[BAS],SDL_SRCCOLORKEY,SDL_MapRGB(mToadStop[BAS]->format,128,255,255));
    22.            mToadStop[DROITE] = SDL_LoadBMP(droite);
    23.            SDL_SetColorKey(mToadStop[DROITE],SDL_SRCCOLORKEY,SDL_MapRGB(mToadStop[DROITE]->format,128,255,255));
    24.            mToadStop[HAUT] = SDL_LoadBMP(haut);
    25.            SDL_SetColorKey(mToadStop[HAUT],SDL_SRCCOLORKEY,SDL_MapRGB(mToadStop[HAUT]->format,128,255,255));
    26.            mToadStop[GAUCHE] = SDL_LoadBMP(gauche);
    27.            SDL_SetColorKey(mToadStop[GAUCHE],SDL_SRCCOLORKEY,SDL_MapRGB(mToadStop[GAUCHE]->format,128,255,255));
    28.       }
    29. };


    et finalement system.cpp:
    1. #ifndef DEF_SYSTEM
    2. #define DEF_SYSTEM
    3.         #include <iostream>
    4.         #include <string>
    5.         #include <SDL/SDL.h>
    6.         using namespace std;
    7.         enum{BAS,HAUT,DROITE,GAUCHE};
    8. #endif



    Merci d'avance! :)
    • Partager sur Facebook
    • Partager sur Twitter
      17 décembre 2007 à 17:25:32

      //je ne suis pas convaincu que inclure un.cpp ca marche ...

      1. void SetStop(const char *bas, const char *droite, const char *haut, const char *gauche)
      2.       {
      3.            mToadStop[BAS] = SDL_LoadBMP(bas);
      4.            SDL_SetColorKey(mToadStop[BAS],SDL_SRCCOLORKEY,SDL_MapRGB(mToadStop[BAS]->format,128,255,255));
      5.            mToadStop[DROITE] = SDL_LoadBMP(droite);
      6.            SDL_SetColorKey(mToadStop[DROITE],SDL_SRCCOLORKEY,SDL_MapRGB(mToadStop[DROITE]->format,128,255,255));
      7.            mToadStop[HAUT] = SDL_LoadBMP(haut);
      8.            SDL_SetColorKey(mToadStop[HAUT],SDL_SRCCOLORKEY,SDL_MapRGB(mToadStop[HAUT]->format,128,255,255));
      9.            mToadStop[GAUCHE] = SDL_LoadBMP(gauche);
      10.            SDL_SetColorKey(mToadStop[GAUCHE],SDL_SRCCOLORKEY,SDL_MapRGB(mToadStop[GAUCHE]->format,128,255,255));
      11.       }


      remplace ces cpp par des hpp ou des h (change les noms des fichier en consequence et je pense que ca marchera.
      (met ce 'using namespace std' la ou tu en as besoins !!)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        17 décembre 2007 à 17:36:20

        -> Pas d'include de .cpp ! On inclut les .h (ou .hpp). Ici, system.cpp devrait plutôt s'appeler system.hpp, idem pour cToad.cpp : cToad.hpp.
        -> Dans les constructeurs on préfère utiliser les listes d'initialisation. CF le cour sur les classes.
        -> '->' s'utilise pour les pointeurs. Quand on crée un tableau de SDL_Surface (sans *) en faisant 'tab[i]' on n'a pas accès à un pointeur, mais à une variable "normale".
        • Partager sur Facebook
        • Partager sur Twitter
          17 décembre 2007 à 19:14:09

          Doh! >_< ...
          J'ai trouver l'erreur : un simple oubli de '*' durant l'initialisation de mon tableau... :-°

          S'cusez-moi : c'est reglé!
          • Partager sur Facebook
          • Partager sur Twitter
            18 décembre 2007 à 10:35:10

            et inclure des .cpp ca ne fait pas buger? o_O
            • Partager sur Facebook
            • Partager sur Twitter
              18 décembre 2007 à 13:49:27

              #include se fout de l'extension du fichier que tu lui donnes à manger, tant que le fichier est du texte.
              .hpp, .cpp, c'est juste une convention, pour se répérer.
              • Partager sur Facebook
              • Partager sur Twitter
                18 décembre 2007 à 16:13:33

                les .cpp ne devrait être que des fichier à compiler individuellement et lier ensemble ensuite (dans un projet, ou un makefile)

                Et les #define sont fonctionnel l'espace de 1 fichier à compiler. Alors imaginez que 2 fichiers .cpp soit compilés et liés et que l'un inclus l'autre (Les protections anti inclusions multiples ne faisant pas effet) : erreur de linkage!


                Ici j'imagine que par paresse, les fichiers ne sont pas tous compilés. C'est bien pour des tests ou pour des projets perso qui resteront cachés mais ce n'est pas bon à mettre en pratique et surtout pas à présenter sur un forum! Il y a des gens qui apprennent par ici!

                De plus il y a un instable "using namespace std" dans un fichier à inclure et pas de protection anti inclusions multiples dans un autre. Ce n'est pas grave immédiatement dans ce projet mais c'est plutôt maladroit. Et je peux t'assurer que ça ne compileras sur tout les compilateurs.
                • Partager sur Facebook
                • Partager sur Twitter

                Problème de Toad...

                × 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