0

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

现在我的代码如下所示:

    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 循环来为我填充数据。我想保持相同的数组格式,因为由于某种原因它不能以任何其他方式工作,但就像这样。我在想一些事情:

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

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

4

2 回答 2

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被命名为xyz; 酌情更改这些。

由于此代码分配了一个动态数组,因此您必须在使用该语句完成后释放分配的内存

delete[] Vertices;
于 2013-07-26T18:41:34.080 回答
-1

要创建可变大小的数组,请使用 new 运算符

MVertex* Vertices = new MVertex Vertices[VertexCount];

在堆上创建数组(记得稍后删除[]),或者使用像 std::vector 这样的 STL 容器。

于 2013-07-26T18:51:07.613 回答