0

所以我刚开始学习 OpenGL,我正在用 C 语言在 Ubuntu 上学习。

我从我的讲师笔记中做了一些例子,他们工作了,但是这个给了我错误。

callbackexample.c: In function ‘main’:
callbackexample.c:17:18: error: ‘displays’ undeclared (first use in this function)
callbackexample.c:17:18: note: each undeclared identifier is reported only once for each     function it appears in

依此类推,适用于我文件中的每个方法。我逐字逐句地按照他的笔记,我得到了这个,所以我不确定出了什么问题。

#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>

#define DEG_TO_RAD 0.017453

int singleb, doubleb;   //window ids
GLfloat theta = 0.0;

int main(int argc, char **argv){

glutInit(&argc, argv);

//create single buffered window
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
singleb = glutCreateWindow("single_buffered");
glutDisplayFunc(displays);
glutReshapeFunc(myReshape);
glutIdleFunc(spinDisplay);
glutMouseFunc(mouse);
glutKeyboardFunc(mykey);

//create double buffered window
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(400,0); //create window to the right
doubleb = glutCreateWindow("double_buffered");
glutDisplayFunc(displayd);
glutReshapeFunc(myReshape);
glutIdleFunc(spinDisplay);
glutMouseFunc(mouse);
glutCreateMenu(quit_menu);
glutAddMenuEntry("quit", 1);
glutAttachMenu(GLUT_RIGHT_BUTTON);

glutMainLoop();
}


void displays() {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
    glVertex2f ( cos(DEG_TO_RAD * theta),
            sin(DEG_TO_RAD * theta));
    glVertex2f ( -sin(DEG_TO_RAD * theta),
            cos(DEG_TO_RAD * theta));
    glVertex2f ( -cos(DEG_TO_RAD * theta),
            -sin(DEG_TO_RAD * theta));
    glVertex2f ( sin(DEG_TO_RAD * theta),
            -cos(DEG_TO_RAD * theta));

glEnd();
glFlush();
}

这只是主要方法的一些代码,以及它之后的第一个方法,我得到了一个错误。通过未声明,我猜这意味着方法没有声明,但我遵循了他的代码,所以我不确定

4

1 回答 1

2

在声明它之前,您尝试displays在 main 函数中使用该方法。您需要将整个函数移到主函数之前,或者将存根添加到顶部:

void displays();

int main(int argc, char **argv){
   ...
}

void displays(){
   ...
}

C 会按照它看到的顺序解析所有内容——你不能使用一个没有完整声明的方法,或者至少有一个声明它会在某个时候存在。

关于你的评论:你得到的找不到 -l* 的东西意味着你要么没有安装 OpenGL 的开发库,要么设置得很奇怪——这就是说它找不到要链接的库文件。

此外,mykey问题意味着您要么没有声明一个mykey函数,要么没有按照原型声明它:

void mykey(unsigned char key, int x, int y) 
于 2014-04-02T22:34:55.177 回答