SDL / C ++ включают проблемы - PullRequest
1 голос
/ 01 ноября 2010

Я начал делать игру для своего школьного проекта на C ++ с библиотекой SDL. Но я не могу найти, что я делаю неправильно в коде ниже.

Я использую VC ++ 2008,

вот вывод компилятора:

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

А вот и источник

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;
}

Буду очень признателен, если кто-нибудь сможет мне помочь.

Заранее спасибо, хорошего дня:)

Ответы [ 3 ]

4 голосов
/ 01 ноября 2010

Переместить #include <SDL.h> в дек.ч. При компиляции initGame.cpp вы никогда не указывали компилятору взглянуть на SDL.h, поэтому он не мог понять, что это было за SDL_, и очень запутался.

Кроме того, не #include один * .cpp файл из другого. Возьмите #include "initGame.cpp" из main.cpp.

2 голосов
/ 01 ноября 2010
  1. В init.h включите заголовки SDL, а cstring для NULL
  2. в init.cpp включите iostream
1 голос
/ 01 ноября 2010

Вам не хватает включенного.

Каждый файл cpp (известный как модуль компиляции) является автономным, поэтому вам нужно дать каждому все определения и тому подобное, что ему нужно. то есть, initGame.cpp имеет включение для dec.h, но не имеет включения для sdl.h.

Итак: либо добавьте 'include в initgame.cpp, либо в dec.h.

...