我有:
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}
}
);
答案 0 :(得分:1)
...
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}}
} {
...
}
...
注意:请注意您在尝试中遗漏了额外的括号。
答案 1 :(得分: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...
}