none
Pointers, Arrays e new

    Question

  • Olá,

    Estou com problemas de pointers e arrays neste código:

    class Vertex { public: float x, y, z; }; class Faces { public: Vertex* vertexes; Faces() { vertexes = new Vertex[3]; } };

    Meu objetivo é, cada classe Face terá um array de 3 endereços de Vertex, e no código terei ? Vertexes. Terei ? Faces também, e um mesmo vértice pode se repetir em 1 ou mais Faces.
    Eu quero guardar o endereço do vértice em Face, assim toda mudança que eu fizer nos vértices, os Faces também mudarão.

    int _tmain(int argc, _TCHAR* argv[])
    {
      Vertex* vertexes = new Vertex[100]; //Só saberei esse número em runtime
      for(int i = 0; i < 100; i++)
      { vertexes[i].x = i; vertexes[i].y = i; vertexes[i].z = i; } //Inicializando os vértices com números quaisquer
    
      Faces* faces = new Faces[10];
      //Definindo os 3 vértices de faces[0] com os três vertexes quaisquer, o primeiro argumento é o índice
      faces[0]->SetVertex(0, &vertexes[0]); 
      faces[0]->SetVertex(1, &vertexes[5]);
      faces[0]->SetVertex(2, &vertexes[10]);
    }

    Se eu mudar vertexes de 0, 5 ou 10, faces[0] referencia esses valores e também deverá ser mudado, mas não estou conseguindo fazer isso.

    A função SetVertex eu testei de 2 maneiras:

    //Recebo um endereço de vertex, e defino ele como sendo o endereço de meu vertexes[index]
    void Faces::SetVertex(int index, Vertex &vertex)
    {
      vertexes[index] = vertex;
    }
    //Não funciona, os valores são copiados mas não é o mesmo endereço, portanto mudanças no vertex original não reflete no array vertexes de faces.
    
    //Crio um array de pointers, defino como o array original de vertex.
    //Na função, recebo um ponteiro de vertex e defino como o endereço de ptrVertexes
    Vertex** ptrVertexes = vertexes;
    void Faces::SetVertex(int index, Vertex* vertex)
    {
      ptrVertexes[index] = vertex;
    }
    //Funciona, vertexes[i] é o mesmo que Faces->vertexes[i].
    

    O problema é que quando defino "ptrVertexes[index] = vertex", o índice não se mantém. Por exemplo:
    ptrVertexes[0] = vertexes[0]; //Ok
    ptrVertexes[1] = vertexes[2]; //Não OK, quando busco o valor de ptrVertexes[1] ele me mostra o valor em vertexes[1]
    ptrVertexes[2] = vertexes[10]; //Não OK, ele mostra o valor de vertexes[2]

    O que estou fazendo de errado e como posso conseguir o array que quero em Faces?

    Wednesday, February 29, 2012 5:43 PM