2011-01-22 3 views
0

このプログラムは、ボックスが作成された後、100個のボックスで画像を作成します.4座標はクラス配列Tileのインデックスに格納されます。これはうまく動作し、私は主な機能では、それが作成されたDraw()関数でのみ、Tile配列を参照することはできません。どんな解決策も認められるだろう。範囲外の配列を参照する

編集:タイルを作成する*タイル[100]グローバルは問題を解決していないようです。

簡体コード:

#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; 
} 

全コード: - マイケル・ホール、それがXoaXによって書かれたorginalバージョンだから

#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; 
} 

このコードは変更されます。

あなたは main()範囲内を宣言しなければなりません main()からづけし、あなたの配列を作るためにあなた

+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を呼んでいますglutMainLoopは一度呼び出された後は一度も返されません。

glutMainLoopの呼び出しの前に値を取り出そうとしているなら、描画メソッドは呼び出されませんが、 glutMainLoop内から呼び出されているため、値は0になります。

参照:http://www.opengl.org/documentation/specs/glut/spec3/node14.html

関連する問題