2010-11-01 4 views
1

J'ai commencé à faire du jeu pour mon projet d'école en C++ avec la bibliothèque SDL. Mais je ne peux pas trouver ce que je fais mal dans le code ci-dessous.Problèmes d'inclusion SDL/C++

J'utilise VC++ 2008,

ici est la sortie compilator:

1>Compiling... 
1>initGame.cpp 
1>.\dec.h(4) : error C2065: 'SDL_HWSURFACE' : undeclared identifier 
1>.\dec.h(4) : error C2065: 'SDL_DOUBLEBUF' : undeclared identifier 
1>.\dec.h(6) : error C2143: syntax error : missing ';' before '*' 
1>.\dec.h(6) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>.\dec.h(6) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>.\dec.h(6) : error C2065: 'NULL' : undeclared identifier 
1>.\initgame.cpp(4) : error C2065: 'SDL_INIT_VIDEO' : undeclared identifier 
1>.\initgame.cpp(4) : error C2065: 'SDL_INIT_AUDIO' : undeclared identifier 
1>.\initgame.cpp(4) : error C2065: 'SDL_INIT_TIMER' : undeclared identifier 
1>.\initgame.cpp(4) : error C3861: 'SDL_Init': identifier not found 
1>.\initgame.cpp(5) : error C2065: 'cerr' : undeclared identifier 
1>.\initgame.cpp(5) : error C2065: 'endl' : undeclared identifier 
1>.\initgame.cpp(9) : error C3861: 'SDL_SetVideoMode': identifier not found 

Et voici la source

dec.h:

#ifndef DEC_H 
#define DEC_H 

int g_win_flags = SDL_HWSURFACE|SDL_DOUBLEBUF; 

SDL_Surface *g_screen = NULL; 

#endif 

initGame.cpp :

#include "dec.h" 

bool initGame(){ 
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) == -1){ 
    cerr << "Unable to initialize SDL" << endl; 
    return false; 
} 

g_screen = SDL_SetVideoMode(640, 480, 0, g_win_flags); 

return true; 
} 

main.cpp:

#include <iostream> 
#include <SDL.h> 

#pragma comment(lib, "SDL.lib") 
#pragma comment(lib, "SDLmain.lib") 

using namespace std; 

#include "initGame.cpp" 

int main(int argc, char *argv[]){ 

initGame(); 
return 0; 
} 

Je serais très reconnaissant si quelqu'un pouvait me aider.

Merci d'une avance ont une belle journée :)

+0

@Zod - défaisait votre rebouclage,. C'est un problème C++. Le problème n'est pas spécifique à Visual C++. –

+0

Oh mon dieu, il y a tellement de petites choses dans ce code qui me soulèvent des avertissements. Certains pourraient appeler le style de code si. –

Répondre

4

Déplacez #include <SDL.h> jusqu'à déc. Lors de la compilation de initGame.cpp, vous n'avez jamais dit au compilateur de regarder SDL.h, donc il n'a pas pu comprendre quelles étaient les choses SDL_ et a été très confus.

En outre, ne pas #include un fichier * .cpp d'un autre. Prenez le #include "initGame.cpp" sur main.cpp.

+0

Merci pour votre réponse. Mais je suis un peu confus, pourquoi devrais-je prendre #include "initGame.cpp" sur main.cpp? Comment aurais-je accès à initGame alors? – peto1234

+1

Vous devez mettre une déclaration de 'initGame' dans un fichier d'en-tête (comme dec.h ou un nouveau fichier initGame.h):' bool initGame(); ' – aschepler

1

vous manque le comprennent.

Chaque fichier cpp (connu sous le nom d'une unité de compilation) est autonome, vous devez donc donner à chaque fichier toutes les définitions dont il a besoin. Par exemple, initGame.cpp a un include pour dec.h, mais il n'en a pas pour sdl.h. Donc: soit ajouter l'include à initgame.cpp ou à dec.h.

2
  1. Dans init.h incluent les en-têtes SDL, et cstring pour NULL
  2. dans init.cpp comprennent iostream