为什么这个数组不会初始化?

时间:2011-04-14 21:27:19

标签: c++ arrays

这基本上就是我要做的,但不是实际的源代码。

namespace namespace { int array [3]; } namespace::array={1,2,3}

我的gcc要求表达,我不知道该怎么做。我必须 namespace::array[1];每个元素吗?

4 个答案:

答案 0 :(得分:6)

您只能在定义中使用初始化列表:

int array[3] = { 1, 2, 3 };

如果您使用:

int array[3];

然后你需要使用

在函数中初始化数组
array[0] = 1; 
array[1] = 2; 
array[2] = 3;

答案 1 :(得分:3)

虽然它是C99和C ++的奇怪混合,但gcc允许这样:

#include <string.h>
int a[3];

int main()
{
    memcpy(a, (int[3]){ 1, 2, 3}, sizeof(a));
}

<!/ P>

答案 2 :(得分:0)

namespace ns { int array[3] = {1, 2, 3}; }怎么样?

答案 3 :(得分:0)

有几种方法:

1)明确设定每个元素的值:

namespace ns {
    int array [3];
}
ns::array[0]=1;
ns::array[1]=2;
ns::array[2]=3;
\\ or if they should contain consequtive values:
\\ for (size_t i = 0; i < 3; ++i)
\\     ns::array[i] = i + 1;

2)如果你想初始化静态数组来代替它的声明,那么你可以按如下方式移动初始化列表:

namespace ns {
    int array[3] = {1, 2, 3};
}

3)使用typedef

namespace ns {
    typedef int array_t[3];
}
ns::array_t array = {1, 2, 3};

3)你也可以对std :: tr1 :: array做一些研究,可以这样使用:

std::tr1::array<int, 3> arr = {1, 2, 3};