2015-04-21 2 views
-1

Я скомпилировал эту программу C++ с dev-C++ и дал «не объявлен в этой области» для всех переменных.переменные программы и области видимости C++

#include <cstdlib>      // standard definitions 
#include <iostream>      // C++ I/O 
#include <cstdio>      // C I/O (for sprintf) 
#include <cmath>      // standard definitions 

#include <GL/glut.h>     // GLUT 
#include <GL/glu.h>      // GLU 
#include <GL/gl.h>      // OpenGL 

using namespace std;     // make std accessible 

//----------------------------------------------------------------------- 
// Global data 
//----------------------------------------------------------------------- 

GLint TIMER_DELAY = 10000;      // timer delay (10 seconds) 
GLfloat RED_RGB[] = {1.0, 0.0, 0.0};   // drawing colors 
GLfloat BLUE_RGB[] = {0.0, 0.0, 1.0}; 

//----------------------------------------------------------------------- 
// Global variables 
//----------------------------------------------------------------------- 
static bool isReversed = false;     // draw reversed colors? 

//----------------------------------------------------------------------- 
// Callbacks 
//  The global variable "isReversed" describes the drawing state. 
//  When false, a blue rectangle is drawn on top of red diamond. 
//  When true the colors are reversed. The "isReversed" variable is 
//  complemented whenever the left mouse button is clicked or the 
//  timer goes off (every 10 seconds). 
//----------------------------------------------------------------------- 

void myReshape(int w, int h) { 
    cout << "MyReshape called width=" << w << " height=" << h << endl; 
    glViewport (0, 0, w, h);     // update the viewport 
    glMatrixMode(GL_PROJECTION);    // update projection 
    glLoadIdentity(); 
    gluOrtho2D(0.0, 1.0, 0.0, 1.0);    // map unit square to viewport 
    glMatrixMode(GL_MODELVIEW); 
    glutPostRedisplay();      // request redisplay 
} 
               // draw diamond and rectangle 
void drawObjects(GLfloat* diamColor, GLfloat* rectColor) { 
    glColor3fv(diamColor);      // set diamond color 
    glBegin(GL_POLYGON);      // draw the diamond 
     glVertex2f(0.90, 0.50); 
     glVertex2f(0.50, 0.90); 
     glVertex2f(0.10, 0.50); 
     glVertex2f(0.50, 0.10); 
    glEnd(); 
    glColor3fv(rectColor);      // set rectangle color 
    glRectf(0.25, 0.25, 0.75, 0.75);   // draw the rectangle 
} 

void myDisplay(void) {       // display callback 
    cout << "MyDisplay called" << endl; 
    glClearColor(0.5, 0.5, 0.5, 1.0);   // background is gray 
    glClear(GL_COLOR_BUFFER_BIT);    // clear the window 

    if (isReversed)        // draw the objects 
     drawObjects(BLUE_RGB, RED_RGB); 
    else 
     drawObjects(RED_RGB, BLUE_RGB); 
    glutSwapBuffers();       // swap buffers 
} 

void myTimer(int id) {       // timer callback 
    cout << "Timer just went off. Reversing colors." << endl; 
    isReversed = !isReversed;     // reverse drawing colors 
    glutPostRedisplay();      // request redraw 
    glutTimerFunc(TIMER_DELAY, myTimer, 0);  // reset timer for 10 seconds 
} 

void myMouse(int b, int s, int x, int y) {  // mouse click callback 
    if (s == GLUT_DOWN) { 
     cout << "Mouse click detected at coordinates x=" 
      << x << " and y=" << y << endl; 
     if (b == GLUT_LEFT_BUTTON) { 
      isReversed = !isReversed; 
      cout << "Left mouse click. Reversing colors." << endl; 
      glutPostRedisplay(); 
     } 
    } 
} 
               // keyboard callback 
void myKeyboard(unsigned char c, int x, int y) { 
    switch (c) {        // c is the key that is hit 
     case 'q':        // 'q' means quit 
      exit(0); 
      break; 
     default: 
      cout << "Hit q to quit. All other characters ignored" << endl; 
      break; 
    } 
} 

//----------------------------------------------------------------------- 
// Main program 
//  This does all the set up for the program. It creates the game 
//  and then passes control to glut. 
//----------------------------------------------------------------------- 

int main(int argc, char** argv) 
{ 
    cout << 
    "Colors swap every 10 seconds.\n" 
    "Click left mouse button to swap colors.\n" << 
    "Try resizing and covering/uncovering the window.\n" << 
    "Hit q to quit." << endl; 

    glutInit(&argc, argv);      // OpenGL initializations 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);// double buffering and RGB 
    glutInitWindowSize(400, 400);    // create a 400x400 window 
    glutInitWindowPosition(0, 0);    // ...in the upper left 
    glutCreateWindow(argv[0]);     // create the window 

    glutDisplayFunc(myDisplay);     // setup callbacks 
    glutReshapeFunc(myReshape); 
    glutMouseFunc(myMouse); 
    glutKeyboardFunc(myKeyboard); 
    glutTimerFunc(TIMER_DELAY, myTimer, 0); 
    glutMainLoop();        // start it running 
    return 0;         // ANSI C expects this 
} 

В чем проблема?

[Ошибка] 'glutPostRedisplay' не был объявлен в этой области

[Ошибка] 'glutSwapBuffers' не был объявлен в этой области

[Ошибка] 'glutPostRedisplay' не был объявлен в этой области

[Ошибка] 'glutTimerFunc' не был объявлен в этой области

[Ошибка] 'GLUT_DOWN' не был объявлен в этой области

[Error] GLUT_LEFT_BUTTON 'не был объявлен в этой области

[Error] glutPostRedisplay' не был объявлен в этой области

т.д.

+1

О, мой ... почему вы используете этот кусок древнего дерьма?Получите себе твердую среду IDE, например [Visual Studio] (https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) или [Code :: Blocks] (http: // www .codeblocks.org/загрузка). –

+1

Все ли перегибы ...() внутри пространства имен? – 4386427

+0

Опрос такого рода вопросов неприемлем. Невозможно дать точные ответы. Только можно дать предложения по догадкам – ANjaNA

ответ

0

С GLUT документы here:

заголовочные файлы GLUT должны быть включены в GLUT программы со следующими включают директивы (which you have):

#include <GL/glut.h>

Поскольку очень большое программное обеспечение оконной системы поставщик (который останется неназванным) имеет очевидную неспособность оценить, что API OpenGL не зависит от их API оконной системы, портативные программы ANSI C GLUT не должны включать непосредственно <GL/gl.h> или <GL/glu.h>. Вместо этого программы ANSI C GLUT должны полагаться на <GL/glut.h>, чтобы включить необходимые файлы заголовков OpenGL и GLU.

Если вы не в окнах, это может вызвать проблемы.

Похоже, что этот файл не включен правильно, так как даже символические константы (например, для GLUT_DOWN) не разрешаются.

0

Вы должны искать файлы заголовков, которые декларируют эти функции и переменные и include их в этом исходном файле.

Хорошим местом для начала будет этот каталог GL, в который вы, похоже, включаете glut.h, если предположить, что он существует.

0

Проверьте здание без функций вызова в main(). Затем попробуйте один за другим. Я думаю, что ошибка исходит от одного из ваших включенных файлов.

Существуют ли классы, определенные в этих файлах. Проверьте, что файлы заголовков в порядке или нет. Проверьте наличие файлов заголовков в указанных путях.

Затем проверьте пространства имен. Если вы определили класс с пространством имен, не забудьте использовать using namespace namespace_name или указать полное имя для переменных.

+0

Это должен быть комментарий. –

Смежные вопросы