2011-01-22 5 views
0

이 프로그램은 상자를 만든 후 100 개의 상자로 이미지를 만듭니다. 4 개의 좌표가 클래스 배열 Tile의 인덱스에 저장되므로 나중에 각 타일을 참조 할 수 있습니다. 이 잘 작동, 내가 만든 주된 함수에서 Tile 배열을 참조 할 수없는 Draw() 함수에서 경우에만 생성됩니다. 어떤 해결책을 주시면 감사하겠습니다.범위 밖의 배열 참조

EDIT : 타일 만들기 * Tile [100] global은 문제를 해결하지 못하는 것 같습니다.

간체 코드 :

#include <iostream> 
class Tiles { 
public: 
    Tiles() : mA (1){} 
    double mA; 
}; 

void Function1() { 
    Tiles Tile[5]; 
    Tile[1].mA = 10; 
} 

int main(int iArgc, char** cppArgv) { 
    Function1(); 
    Tile[1].mA = 2; // ERROR "Tile" is unidentified. 
    return 0; 
} 

전체 코드 : - 마이클 홀

#include <iostream> 
#include <glut.h> 
class Tiles { 
public: 
Tiles() : mA() , mB() , mC() , mD() , mCP(){} 
double mA[2] , mB[2] , mC[2] , mD[2] , mCP[2]; 
}; 

void Draw() { 
glClear(GL_COLOR_BUFFER_BIT); 
glColor3f(1.0, 1.0, 1.0); 
double dX1 = 0.0, dY1 = 0.0, dMidX = 0.0, dMidY = 0.0, dXC = 0.0, dYC = 0.0; 
int sq = 0, row = 1, CoordMap = 0; 
Tiles Tile[100]; 
    //Tiles* Tile = new Tiles[100]; doesnt seem to be any different.. 
    for (int i=0; i < 10;i++) { // ROWS 
    for (int i2=0; i2 < 10; i2++) { // BOXES 
     glBegin(GL_LINE_STRIP); 
     glVertex3f(dX1, dY1, 0.0); 
     Tile[sq].mA[1] = dX1; 
     Tile[sq].mA[2] = dY1;// Bottom Left 
     dX1 = dX1 + .1; 
     dXC = dX1; 
     dYC = dY1; 
     glVertex3f(dX1, dY1, 0.0); 
     Tile[sq].mB[1] = dX1; 
     Tile[sq].mB[2] = dY1;// Bottom Right 
     dY1 = dY1 + .1; 
     glVertex3f(dX1, dY1, 0.0); 
     Tile[sq].mC[1] = dX1; 
     Tile[sq].mC[2] = dY1;// Top Left 
     dX1 = dX1 - .1; 
     glVertex3f(dX1, dY1, 0.0); 
     Tile[sq].mD[1] = dX1; 
     Tile[sq].mD[2] = dY1;// Top Right 
     glEnd(); 
     glBegin(GL_POINTS); 
     glVertex3f((dX1 + .05) , (dY1 - .05), 0.0); 
     glEnd(); 
     ++sq; 
     dX1 = dXC; 
     dY1 = dYC; 
     } 
     row++; 
     dX1 = 0.0; 
     dY1 = ((row * .1) - .1); 
     } 
    glFlush(); 
    } 


void Initialize() { 
glClearColor(0.0, 0.0, 0.0, 0.0); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 
} 

int main(int iArgc, char** cppArgv) { 
glutInit(&iArgc, cppArgv); 
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
glutInitWindowSize(250, 250); 
glutInitWindowPosition(200, 200); 
glutCreateWindow("XoaX.net"); 
Initialize(); 
glutDisplayFunc(Draw); 
glutMainLoop(); 
//Tile[2].mA[1] = 2; // 
return 0; 
} 

이 코드는 XoaX에 의해 작성 orginal 한 버전의에서 수정됩니다.

당신이 main() 범위 내에서 Tiles를 선언해야 main()에서 accesible 당신의 Tiles 배열을 만들려면 당신

+2

너무. 많은. 암호. –

+0

간편하게 단순화되었습니다. –

답변

1

감사드립니다. 예를 들어 Tiles Tile[100]; 선언을 전체 범위 (예 : void Draw() { 줄)로 옮깁니다.

+0

나는이 방법을 시도했고 타일 (41)의 값을 계산하려고 할 때 예상 결과 (0.1)에 반대하여 0을 받는다. (std :: cout << Tile [40] .mA [1];) –

+0

아직 초기화되지 않았기 때문에 초기화가'Draw()'(매우 이상 함)에서 일어나기 때문에. 각 프레임마다 타일 배열을 다시 빌드 하시겠습니까? – mbaitoff

0

당신이 주에서 읽을 수 있도록하려면, 대답은 글로벌 범위로 이동하는 것입니다,하지만 ..

현재는 OpenGL과 GLUT를 사용하고, 당신은 단지 타일에 액세스하기 전에 위해 glutMainLoop를 호출하고 main() ..에서 쓰여진 것처럼 glutMainLoop은 한 번 호출 된 적이 없다.

만약 glutMainLoop을 호출하기 전에 값을 계산하려한다면 draw 메소드가 호출되지 않을 것이다. glutMainLoop ..에서 호출 되었기 때문에 여전히 값은 0이됩니다.

참조 : http://www.opengl.org/documentation/specs/glut/spec3/node14.html