引用其范围之外的数组

时间:2011-01-22 04:34:50

标签: c++ c arrays object reference

这个程序创建一个包含100个框的图像,在创建框之后,它的4个坐标存储在类数组Tile的索引中,所以我可以在我的代码中稍后引用每个图块。这工作正常,我不能在我的main函数中引用Tile数组,只能在创建它的Draw()函数中引用。任何解决方案都将不胜感激。

编辑:制作瓷砖*瓷砖[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;
}

完整代码:

#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 - Michael Hall编写的原始版本修改的。

谢谢

2 个答案:

答案 0 :(得分:1)

要从Tiles访问您的main()数组,您必须在Tiles范围内声明main()。例如,将您的声明Tiles Tile[100];移至全局范围,即在void Draw() {行之前。

答案 1 :(得分:0)

如果你想从main访问它,答案是将它移到全局范围,但是..

你在这里使用openGL和过剩,并且你在访问main()中的Tile之前调用了glutMainLoop ..如规范中所写,glutMainLoop一旦调用就永远不会返回..

如果偶然的话,你试图在调用glutMainLoop之前测试该值,那么draw方法将不会被调用,因为它是在glutMainLoop中调用的..这使得值仍为0 .. < / p>

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