使用大括号初始化列表初始化结构体向量

13

我这样初始化普通类型的向量:

vector<float> data = {0.0f, 0.0f};

但是当我使用结构体而不是普通类型时

struct Vertex
{
    float position[3];
    float color[4];
};
vector<Vertex> data = {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f, 0.0f}};

我收到错误信息:无法将'{{0.0f,0.0f,0.0f},{0.0f,0.0f,0.0f,0.0f}}'从'<大括号初始化列表>'转换为'std::vector<Vertex>'。这是什么问题?

3个回答

21

一组{}缺失:

std::vector<Vertex> data =
{ // for the vector
    { // for a Vertex
        {0.0f, 0.0f, 0.0f},      // for array 'position'
        {0.0f, 0.0f, 0.0f, 0.0f} // for array 'color'
    },
    {
        {0.0f, 0.0f, 0.0f},
        {0.0f, 0.0f, 0.0f, 0.0f}
    }
};

4

实际上你需要再加一个 {}

vector<Vertex> data = {{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f, 0.0f}}};

一个 '{' 用于向量,一个用于结构体,一个(一对)用于结构体成员数组...


0

具有向量成员的对象也可以进行初始化。

#include <iostream>
#include <string>
#include <vector>
using namespace std;


class Test
{
   public:
   struct NumStr
   {
      int num;
      string str;
   };

   Test(vector<int> v1,vector<NumStr> v2) : _v1(v1),_v2(v2) {}
   vector<int> _v1;
   vector<NumStr> _v2;
};

int main()
{
   Test t={ {1,2,3}, {{1,"one"}, {2,"two"}, {3,"three"}} };
   cout << t._v1[1] << " " << t._v2[1].num << " " << t._v2[1].str << endl;
   return 0;
}

2 2 二


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接