[英]Why does my opengl freeglut application compile as C but not as C++?
这不是代码的问题,因为当我告诉编译器将其编译为C时它会编译,但是当我将设置设为默认值(即将其编译为C ++)时它不会编译。 当我将其编译为C ++时,在“未定义对glClear的引用”的过程中,出现许多错误。
我正在使用Microsoft的Visual Studio C ++编译器。 我已正确链接所有内容。
代码是:
#include <GL/glut.h>
#include <GL/freeglut.h>
#include <GL/gl.h>
void display(void)
{
/* Clear all pixels */
glClear(GL_COLOR_BUFFER_BIT);
/* draw white polygon (rectangle) with
* corners at (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)
*/
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f(0.25, 0.25, 0.0);
glVertex3f(0.75, 0.25, 0.0);
glVertex3f(0.75, 0.75, 0.0);
glVertex3f(0.25, 0.75, 0.0);
glEnd();
/* don't wait!
* start processing buffered OpenGL routines
*/
glFlush();
}
void init(void)
{
/* Select clearing background color */
glClearColor(0.0, 0.0, 0.0, 0.0);
/* Initialize viewing values */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
/*
* Declare initial window size, position, and display mode
* (single buffer and RGBA). Open window with “hello”
* in its title bar. Call initialization routines.
* Register callback function to display graphics.
* Enter main loop and process events.
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(250, 250);
glutInitWindowPosition(100, 100);
glutCreateWindow("hello");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0; /* ISO C requires main to return int. */
}
另外,如果任何人都有使用C ++学习opengl的适当资源,您能推荐它吗?
可能是因为在当前包含的任何头文件中均未声明glClear
。 在C语言中,未声明的函数通常基于其参数被假定为具有某种类型,并返回int
。 因此,使用C进行编译时,您可能会收到有关未声明的警告(我希望您启用了警告,并在编译时阅读警告?),但是它将尽最大努力进行编译和链接。
C ++对未声明的函数更加严格。
正如Alexadre Jasmin和Bart所指出的,请验证您是否正确链接了OpenGL库。 我用
-lGLU -lGL -lglut与Ubuntu上的freeglut。
如果这样不能解决问题,请尝试添加
#定义GLUT_DISABLE_ATEXIT_HACK在您的cpp文件的顶部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.