2013-07-26 34 views
0

所以我有一个顶点数组,我试图用文件中的数据填充数组。C++创建数组?

现在我的代码如下所示:

int VertexCount = Input.get(); 
    MVertex Vertices[4] = 
    { 
     {0.0f, 0.0f, 0.0f,}, 
     {1.0f, 0.0f, 1.0f,}, 
     {0.0f, 0.0f, 1.0f,}, 
     {1.0f, 0.0f, 0.0f,}, 
    }; 

现在它工作得很好,除了使用VertexCount初始化数组的大小,但我想它,这取决于顶点我需要一个for-loop来为我填写数据。我想保持相同的数组格式,因为由于某种原因它不能以其他方式工作,但是像这样。我在想:

int VertexCount = Input.get(); 
    MVertex Vertices[VertexCount] = 
    { 
     for (int i = 0; i < VertexCount; i++) 
     { 
      {Input.get(), Input.get(), Input.get(),}, 
     } 
    }; 

但是,这不起作用我只是得到一些语法错误。有人可以告诉我怎么写吗?

+0

请编辑您的问题,以包括'MVertex'声明。 –

回答

2

你试图一次做太多的事情。你需要打破这种分为两个步骤:

  1. 声明数组和分配数组:

    int VertexCount = Input.get(); 
    MVertex* Vertices = new MVertex[VertexCount]; 
    
  2. 初始化数组的元素:

    for (int i = 0; i < VertexCount; i++) 
    { 
        MVertex v; 
        v.x = Input.get(); 
        v.y = Input.get(); 
        v.z = Input.get(); 
    
        Vertices[i] = v; 
    } 
    

请注意,我分别创建了MVertex对象。在我看来,这使得你的代码更加清晰。它还可以帮助您编写代码,因为您一次只关注一件事,而不是尝试用更复杂的语法一次完成多个步骤。

我还假设MVertex中的三个字段分别命名为x,yz;适当更改这些。

由于该代码分配一个动态数组,你必须免费的,当你使用它的声明

delete[] Vertices; 
-1

要创建可变大小的数组完成所分配的内存,使用new运算符

MVertex* Vertices = new MVertex Vertices[VertexCount]; 

在堆上创建数组(并记住稍后删除[]],或者使用STL容器,如std :: vector。

+0

这只是一个部分答案,因为它没有说明如何初始化分配数组的元素。 –