繁体   English   中英

使用大括号括起初始化列表初始化struct vector

[英]Initializing struct vector with brace-enclosed initializer list

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

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}};

我得到错误could not convert '{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f, 0.0f}}' from '<brace-enclosed initializer list>' to 'std::vector<Vertex>' 这有什么问题?

缺少一组{}

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}
    }
};

实际上你还需要一个{}

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

一个'{'用于向量,一个用于struct,一个用于struct member-arrays ...

也可以初始化具有矢量成员的对象。

#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两

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM