main.cpp:(.texte+0x5f): undefined reference to

J'essaie de compiler un peu d'exercice à partir d'une SDL guide.

Je compile comme ceci:

g++ -o main main.cpp -I/usr/local/include/SDL2 -L/usr/local/lib -lSDL2

et j'obtiens ceci:

/tmp/cci2rYNF.o: In function `main':
main.cpp:(.text+0x5f): undefined reference to `Game::init(char const*, int, int, int, int, int)'
collect2: error: ld returned 1 exit status

et mon code est:

main.cpp

#include "Game.h"

//our Game object
Game* g_game = 0;

int main(int argc, char* argv[])
{
    g_game = new Game();
    g_game->init("Chapter 1", 100, 100, 640, 480, 0);

    while(g_game->running())
    {
    g_game->handleEvents();
    g_game->update();
    g_game->render();
    }
    g_game->clean();

    return 0;
}

Jeu.h

#ifndef __Game__
#define __Game__

#include <SDL.h>

class Game
{
    public:
      Game() {}
      ~Game() {}

      bool init(const char* title, int xpos, int ypos, int width, int height, int flags);
      void render(){}
      void update(){}
      void handleEvents(){}
      void clean(){}

      //a function to access the private running variable
      bool running() { return m_bRunning; }

    private:

      SDL_Window* m_pWindow;
      SDL_Renderer* m_pRenderer;
      bool m_bRunning;
};

#endif //defined(__Game__) */

Game.cpp

#include "Game.h"
bool Game::init(const char* title, int xpos, int ypos, int width, int height, int flags)
{
//attempt to initialize SDL
if(SDL_Init(SDL_INIT_EVERYTHING) == 0)
{
std::cout << "SDL init success\n";
//init the window
m_pWindow = SDL_CreateWindow(title, xpos, ypos,
width, height, flags);
if(m_pWindow != 0) //window init success
{
std::cout << "window creation success\n";
m_pRenderer = SDL_CreateRenderer(m_pWindow, -1, 0);
if(m_pRenderer != 0) //renderer init success
{
std::cout << "renderer creation success\n";
SDL_SetRenderDrawColor(m_pRenderer,
255,255,255,255);
}
else
{
std::cout << "renderer init fail\n";
return false; //renderer init fail
}
}
else
{
std::cout << "window init fail\n";
return false; //window init fail
}
}
else
{
std::cout << "SDL init fail\n";
return false; //SDL init fail
}
std::cout << "init success\n";
m_bRunning = true; //everything inited successfully, start main loop
return true;
}
void Game::render()
{
SDL_RenderClear(m_pRenderer); //clear the renderer to the draw color
SDL_RenderPresent(m_pRenderer); //draw to the screen
}
void Game::clean()
{
std::cout << "cleaning game\n";
SDL_DestroyWindow(m_pWindow);
SDL_DestroyRenderer(m_pRenderer);
SDL_Quit();
}
void Game::handleEvents()
{
SDL_Event event;
if(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
m_bRunning = false;
break;
default:
break;
}
}
}
  • Eh bien, vous n'avez pas de lien game.cpp s'objet fichier.
  • Toujours le même: beaucoup de temps perdu et comme une stupide erreur. Je dois apprendre un peu g++. Merci!
InformationsquelleAutor IIanFumenchu | 2014-01-21