编译器错误:无法确定数组大小标识符的大小

时间:2014-02-19 14:51:58

标签: c++ arrays compiler-errors

下面用于合并两个数组的代码,在第5-6行,为什么编译正常,而其他显示错误“Intializer无法确定结果的大小”

 void Merge(int first[],int second[],int f_length,int s_length){
     int total_length=f_length+s_length;
     int f_count=0;
     int s_count=0;
     **int result[total_length]**;//this is working fine
     *int result[]=new int[total_length]*;//Generating compiler error
     for(int i=0;i<total_length;i++){
            if(first[f_count]<second[s_count] && f_count<f_length)
                result[i]=first[f_count++];
            else
                 result[i]=second[s_count++];
             }
     for(int i=0;i<total_length;i++)
             cout<<result[i]<<endl;
     }

1 个答案:

答案 0 :(得分:1)

在C ++中定义数组要求它的大小在编译时是一个常量表达式。所以这个定义

 int result[total_length];

无效,因为total_length不是常量表达式。

如果您的意思是以下行

int result[]=new int[total_length];

然后正确的语法是

int *result = new int[total_length];

编译器报告错误,因为它无法从表达式

确定数组的大小
new int[total_length]

由于使用了无效的语法构造。

除此之外,您的功能无效。您不检查s_count是否超过s_length。即使是这种无效的条件

if(first[f_count]<second[s_count] && f_count<f_length)

应至少写成

if ( f_count<f_length && first[f_count]<second[s_count] )

因为您可能无法取消引用指向数组最后一个元素之外的指针。这首先取消引用指针first[f_count]<second[s_count],并且只有在检查它是否是数组f_count<f_length中最后一个元素之后的元素之后