title: Why is this class that does not declare any pure virtual member function abstract?
body: <p>How is the following class <code>Game</code> abstract? And how do I make it concrete so I can create an instance of it?</p>
  
  <p>game.h</p>
  
  <pre><code>#include &lt;JApp.h&gt;
  #include &lt;JGE.h&gt;
  
  class Game: public JApp
  {    
  private: 
      JGE* Engine;
      int x, y, x2, y2;
  public:
      Game(JGE *engine);
      virtual ~Game();
      virtual void Create();
      virtual void Destroy();
      virtual void Update();
      virtual void Render();
  };
  </code></pre>
  
  <p>main.cpp</p>
  
  <pre><code>//Other headers
  #include "game.h"
  int main(void)
  {
      JGE* engine = NULL;
      SetupCallbacks();
      engine = JGE::GetInstance();
      engine-&gt;printf("Starting Game!");
      Game* g = new Game(engine); // Error 'Game is an abstract type 
      engine-&gt;SetApp(g);
      engine-&gt;Run();
      engine-&gt;Destroy();
  
      sceKernelExitGame();
  }
  
  Game::Game(JGE* engine) : JApp(engine)
  {
      Engine = engine;
      x = 0;
      x2 = 100;
      y = 0;
      y2 = 100;
  }
  void Game::Update()
  {
      if (this-&gt;Engine-&gt;GetButtonClick(PSP_CTRL_UP))
      {
          x2 += 1;
          y2 += 1;
  
      }
      else if(this-&gt;Engine-&gt;GetButtonClick(PSP_CTRL_DOWN))
      {
  
          y2 += 10;
          y += 10;
      }
  }
  void Game::Create()
  {    
  }
  void Game::Render()
  {
       JRenderer* renderer = JRenderer::GetInstance();
       renderer-&gt;DrawLine(x, y, x2, y2, ARGB(0, 0, 0, 255));
  }
  Game::~Game()
  {       
  }
  void Game::Destroy()
  {   
  }
  </code></pre>
  
  <p>P.S. Any explanation will be helpful since I am not an expert in object-oriented programming.</p>
  
  <p>Here is the error message together with some other stuff:</p>
  
  <pre><code>1&gt;------ Build started: Project: PSP Pong, Configuration: Debug Win32 ------
  1&gt;  psp-g++ -I. -Ic:/pspsdk/psp/sdk/include -O2 -G0 -Wall  -I. -Ic:/pspsdk/psp/sdk/include -O2 -G0 -Wall  -fno-exceptions -fno-rtti -D_PSP_FW_VERSION=150   -c -o main.o main.cpp
  1&gt;  main.cpp: In function 'int main()':
  1&gt;main.cpp(57): error : cannot allocate an object of abstract type 'Game'
  1&gt;  game.h (5) : note:   because the following virtual functions are pure within 'Game':
  1&gt;  c:/pspsdk/psp/sdk/include/JApp.h (78) : note:   virtual void JApp::Pause()
  1&gt;  c:/pspsdk/psp/sdk/include/JApp.h (84) : note:   virtual void JApp::Resume()
  1&gt;  main.cpp: In constructor 'Game::Game(JGE*)':
  1&gt;main.cpp(66): error : no matching function for call to 'JApp::JApp(JGE*&amp;)'
  1&gt;  c:/pspsdk/psp/sdk/include/JApp.h (26) : note: candidates are: JApp::JApp()
  1&gt;  c:/pspsdk/psp/sdk/include/JApp.h (22) : note:                 JApp::JApp(const JApp&amp;)
  1&gt;  c:\pspsdk\bin\make: *** [main.o] Error 1
  1&gt;  Press any key to continue . . . 
  1&gt;C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.MakeFile.Targets(38,5): error MSB3073: The command "c:\pspsdk\bin\vsmake.bat" exited with code -1.
  ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
  </code></pre>