为什么int arr [] = {0,3,2,4,5,6,7};给出错误并且int arr [7] = {0,3,2,4,5,6,7};不

时间:2019-03-07 14:42:15

标签: c++ arrays

#include<iostream>
#include<stdio.h>
using namespace std;
class Test
{   
   private:
   int array[]={0,2,4,6,8,10,12};//this line is the root cause of the error but why ?   
   public :
   void compute();
};
void Test::compute()
{
    int result =0;
    for(int i=0;i<7;i++)
    {
        result += array[i];
    }
        cout<<result;
}
int main()
{
    Test obj;
    obj.compute();
    return 0;
}

如果我将以上代码中的int array[]替换为array[7],则程序将编译并运行并显示警告。

1 个答案:

答案 0 :(得分:5)

与其他作用域中的数组不同,类中的数组无法通过其初始化程序确定大小。初始化程序只是语法糖,它告诉编译器使用什么初始化成员。那意味着你真正拥有的是

class Test
{   
   private:
   int array[]; 
   public :
   void compute();
   Test(): array({0,2,4,6,8,10,12}) {}
};

无法使用,因为数组没有大小信息。

当您指定尺寸时,它可以工作,因为现在实际上有一个有效的尺寸。如果你想拥有类似的东西

int array[]={0,2,4,6,8,10,12};

在课堂上然后使用std::vector代替

std::vector<int> array={0,2,4,6,8,10,12};