[英]How to use initializer_list
我有:
1)NetBeans 7.3 2)Qt by Digia v4.8.4。 3)MinGW編譯器。
你能幫我初始化我的陣列嗎? 不幸的是,我失敗了。 我知道我必須使用initializer_list。 但是包含在我的文件中以及如何組織所有內容對我來說是個謎。
你願意幫助我嗎?
Figure.h
#include <initializer_list>
class Figure: public QObject{
Q_OBJECT
private:
int shape[4][4][4];
Figure.cpp
Figure:: Figure(){
std::initializer_list<int> init;
auto init = std::initializer_list<int>
(
{
{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 0, 0}
,
{0, 0, 0, 0},
{0, 0, 1, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}
,
{0, 0, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}
,
{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 1, 0, 0},
{0, 0, 0, 0}
}
);
...
private:
int shape[4][4][4] {
{{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 0, 0}}
,
{{0, 0, 0, 0},
{0, 0, 1, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}}
,
{{0, 0, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}}
,
{{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 1, 0, 0},
{0, 0, 0, 0}}
};
...
在您的特定情況下,您甚至不需要顯式使用initalizer_list
因為靜態數組可以在定義位置初始化,這可以通過上面示例中的語法完成(需要符合C ++ 11)。
也可以在構造函數初始化列表中初始化shape
:
...
Figure::Figure(): shape {
{{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 0, 0}}
,
{{0, 0, 0, 0},
{0, 0, 1, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}}
,
{{0, 0, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}}
,
{{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 1, 0, 0},
{0, 0, 0, 0}}
} {
...
}
...
注意:請注意您在嘗試中遺漏了額外的括號。
您不需要創建initializer_list
,特別是因為您將嘗試將其分配給您的數組,而不是從它初始化您的數組 - 這將是非法的。 相反,您可以直接在構造函數的初始化列表中初始化數組,如下所示:
Figure::Figure()
: shape
{
{
{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 0, 0}
},
{
{0, 0, 0, 0},
{0, 0, 1, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}
},
{
{0, 0, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}
},
{
{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 1, 0, 0},
{0, 0, 0, 0}
}
}
{
// Body of the constructor...
};
請注意,在C ++ 11中,您還可以為數組提供內聯初始值設定項,如下所示:
class Figure: public QObject {
Figure();
private:
int shape[4][4][4] {
{
{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 0, 0}
},
{
{0, 0, 0, 0},
{0, 0, 1, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}
},
{
{0, 0, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}
},
{
{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 1, 0, 0},
{0, 0, 0, 0}
}
};
};
Figure::Figure() {
// Body of the constructor...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.