不能在两个重叠的结构上使用初始化列表

问题描述

我想使用初始化列表来初始化变量 p1 以简化我的事情。但它没有发生,请帮忙。代码几乎是不言自明的。

struct word_t {
    int in;
    string word;
    int out;
    word_t(int i,string w,int o): in(i),word(w),out(o) {}
};


struct para_t {
    std::vector<word_t> words;
};

struct song_t { 
    std::vector<para_t> paras;
};    

int main()
{
    //SONG
    std::vector<song_t> song;

    para_t p1{ { 0,"We",10 },{ 11,"are",14 },{ 15,"the",18 },{ 19,"World",22 } }; // CANNOT INITIALIZE LIKE SO 

    p1.words.push_back(word_t(0,10));   // THIS WORKS


}

解决方法

您还需要一个{},即

para_t p1{ { { 0,"We",10 },{ 11,"are",14 },{ 15,"the",18 },{ 19,"World",22 } } };
//       ^                                                                                  ^ <- for para_t
//         ^                                                                              ^   <- for para_t::words
//           ^             ^                                                                  <- for elements (i.e. word_t) in vector
,

如果您初始化 word_t 的向量,它将是这样的:

std::vector<word_t> song{ { 0,22 } };

但是由于您的 std::vector<word_t> words;struct para_t 内,您有一个额外的级别,因此您应该在初始化列表周围使用额外的 { }

由于它是结构中的唯一成员,请考虑将其设为 typedef:

typedef std::vector<word_t> para_t;
para_t song{ { 0,22 } };

所以你不需要额外的括号。

,

您还可以为接受 @Override public void onBindViewHolder(GameViewHolder holder,int position) { final Games game = gameList.get(position); Bitmap originalBitmap = BitmapFactory.decodeResource(holder.itemView.getContext().getResources(),R.drawable.forty); Bitmap blurredBitmap = BlurBuilder.blur(holder.itemView.getContext(),originalBitmap); } para_t 添加构造函数。

std::initializer_list<word_t>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...