This is really hard to follow. You will likely find it much easier to learn if you just write simple, top-to-bottom C style code as much as possible while you learn OpenGL and GLFW. You can abstract things into classes later when you have a better feel for the APIs, but right now you are shooting yourself in the foot...
Your immediate problem seems to be that you did not bind the vertex array after creating it. Changing the code to this:
VAObject vao(1);
vao.bind_vao();
prevents the crash for me -- however, there is also an issue with the vertices. With only the above change, the window is drawn blank. Changing vertices to match the example like this:
float vertices[] = {
0.5f, 0.5f, 0.0f, // top right
0.5f, -0.5f, 0.0f, // bottom right
-0.5f, -0.5f, 0.0f, // bottom left
-0.5f, 0.5f, 0.0f // top left
};
results in an orange rectangle drawn.