title: C++ using a member function from from one class in the main function?
body: <p>I have my main and im setting up input but im using getters/setters too use a method from InputHander to my main but doing so is causing a stack overflow as there is just an infinite loop going on.</p>
  
  <p>The warning i get:</p>
  
  <pre><code>warning C4717: 'key_callback' : recursive on all control paths, function will cause runtime stack overflow
  </code></pre>
  
  <p>I have no other idea how too call this method other than use a getter and setter</p>
  
  <p>Main.cpp</p>
  
  <pre><code>#include &lt;glfw3.h&gt;
  #include &lt;stdio.h&gt;
  #include &lt;iostream&gt;
  
  #include "InputHandler.h"
  
  using namespace std;
  
  /* Begin Void prototyping */
  void error_callback(int error, const char* description);
  void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods);
  
  int main(void)
  {
      GLFWwindow* window;
  
      /* Initializes error call-backs */
      glfwSetErrorCallback(error_callback);
  
      /* Initialize the library */
      if (!glfwInit())
          return -1;
  
      /* Create a windowed mode window and its OpenGL context */
      window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); // fullscreen glfwGetPrimaryMonitor() (first NULL)
      if (!window)
      {
          glfwTerminate();
          return -1;
      }
  
      /* Makes OpenGL context current */
      glfwMakeContextCurrent(window);
  
      /* Make the window's context current */
      glfwMakeContextCurrent(window);
  
      /* Receives input events */
      glfwSetKeyCallback(window, key_callback);
  
      /* Loop until the user closes the window */
      while (!glfwWindowShouldClose(window))
      {
          /* Render here */
          float ratio;
          int width, height;
  
          glfwGetFramebufferSize(window, &amp;width, &amp;height);
          ratio = width / (float) height;
  
          glViewport(0, 0, width, height);
          glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
          glEnable(GL_DEPTH_TEST);
          glDepthFunc(GL_LEQUAL);
  
          glMatrixMode(GL_PROJECTION);
          glLoadIdentity();
          glOrtho(-ratio, ratio, -1.f, 1.f, 1.f, -1.f);
          glMatrixMode(GL_MODELVIEW);
  
          glLoadIdentity();
          glRotatef((float) glfwGetTime() * 10.f, 0.f, 10.f, 0.f);
  
          /* Swap front and back buffers */
          glfwSwapBuffers(window); 
  
          /* Poll for and process events */
          glfwPollEvents();
      }
  
      glfwDestroyWindow(window);
  
      glfwTerminate();
      return 0;
  }
  
  /*
  Calls back the program if a GLFW function fail and logs it
  */
  void error_callback(int error, const char* description)
  {
      fputs(description, stderr);
  }
  
  /*
      Gets InputHandler::key_callback returns key_callback too use in Main.cpp
  */
  void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
  {
      return key_callback(window, key, scancode, action, mods);
  }
  </code></pre>
  
  <p>InputHandler.h</p>
  
  <pre><code>#pragma once
  
  #include &lt;glfw3.h&gt;
  #include &lt;iostream&gt;
  
  using namespace std;
  
  class InputHandler
  {
  public:
      InputHandler(void);
      ~InputHandler(void);
  
      static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods);
  };
  </code></pre>
  
  <p>InputHandler.cpp</p>
  
  <pre><code>#include "InputHandler.h"
  
  GLFWwindow* window;
  
  InputHandler::InputHandler(void)
  {
  }
  
  
  InputHandler::~InputHandler(void)
  {
  }
  
  /* Gives keys events */
  static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
  {
      switch(key)
      {
      case GLFW_KEY_ESCAPE:
          glfwSetWindowShouldClose(window, GL_TRUE);
          break;
      case GLFW_KEY_W:
          cout &lt;&lt; "W working" &lt;&lt; endl;
          break;
      case GLFW_KEY_A:
          break;
      case GLFW_KEY_S:
          break;
      case GLFW_KEY_D:
          break;
      case GLFW_KEY_1:
          break;
      case GLFW_KEY_2:
          break;
      }
  }
  </code></pre>