繁体   English   中英

为什么我的opengl freeglut应用程序编译为C而不编译为C ++?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM