I believe your problem can be solved by simply creating a Vertex Array Object for OpenGL to utilize before you create your Vertex Buffer Object.
You're required to use VAOs past OpenGL 3.1 core.
// In ObjectRenderInfo create your VAO
GLuint vertexArrayId;
glGenVertexArrays(1, &vertexArrayId);
glGenBuffers(1, &vbo);
...
It may help you avoid issues like this in the future, when getting started with OpenGL, frequently test to make sure your assumptions about what is functioning are correct by testing frequently. If you can't get a single white point or triangle to display on screen first, there's no point in writing all the code to roll your own version of a perspective projection (especially when you could use a simple one-liner like glm::perspective).