问题描述
我想使用初始化列表来初始化变量 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>