Я пытаюсь сделать видеоигру Snake с использованием C ++ и OpenGL, чтобы я мог реализовать алгоритм машинного обучения, чтобы играть в нее.
#include <stdio.h>
#include <GL/glut.h>
#include <iostream>
namespace GameBoxes
{
template<class T>
class Box
{
public:
Box(); //Initialize with a square size of 10 in center and color white.
void display(void);
private:
T colorBlue;
T colorRed;
T colorGreen;
T vertex1Pos1;
T vertex1Pos2;
T thirdForm1;
T vertex2Pos1;
T vertex2Pos2;
T thirdForm2;
T vertex3Pos1;
T vertex3Pos2;
T thirdForm3;
T vertex4Pos1;
T vertex4Pos2;
T thirdForm4;
};
} //GameBoxes
namespace GameBoxes
{
template <class T>
Box<T>::Box() : colorBlue(0.0), colorRed(0.0), colorGreen(0.0), vertex1Pos1(2.0),
vertex1Pos2(4.0), thirdForm1(0.0), vertex2Pos1(8.0), vertex2Pos2(4.0),
thirdForm2(0.0), vertex3Pos1(8.0), vertex3Pos2(6.0), thirdForm3(0.0),
vertex4Pos1(2.0), vertex4Pos2(6.0), thirdForm4(0.0)
{
}
template <class T>
void Box<T>::display(void)
{
glClear( GL_COLOR_BUFFER_BIT);
glColor3f(colorBlue, colorRed, colorGreen);
glBegin(GL_POLYGON);
glVertex3f(vertex1Pos1, vertex1Pos2, thirdForm1);
glVertex3f(vertex2Pos1, vertex2Pos2, thirdForm2);
glVertex3f(vertex3Pos1, vertex3Pos2, thirdForm3);
glVertex3f(vertex4Pos1, vertex4Pos2, thirdForm4);
glEnd();
glFlush();
}
} // GameBoxes
int main(int argc, char **argv)
{
printf("Hello World\n");
glutInit(&argc, argv);
int windowPos1, windowPos2, windowSize1, windowSize2;
std::cout << "Please enter WinPos1, WinPos2, WinSize1 and WinSize2\n";
std::cin >> windowPos1 >> windowPos2 >> windowSize1, windowSize2;
glutInitDisplayMode ( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(windowPos1, windowPos2);
glutInitWindowSize(windowSize1, windowSize2);
glutCreateWindow ("square");
glClearColor(0.0, 0.0, 0.0, 0.0); // black background
glMatrixMode(GL_PROJECTION); // setup viewing projection
glLoadIdentity(); // start with identity matrix
glOrtho(0.0, 10.0, 0.0, 10.0, -1.0, 1.0); // setup 10x10x2 viewing world
GameBoxes::Box<double> square();
glutDisplayFunc(square.display);
glutMainLoop();
return 0;
};
Это дает мне ошибку, указанную в названии.
Код отлично работает, когда я жестко кодирую все переменные и удаляю void display (void) из класса.
Я, честно говоря, не понимаю, почему функция display внутри класса вызывает так многопроблемы.Я собираюсь попытаться сделать это функцией друга.