我正在構建一個包含C++程序的R包。檢查運行正常,但我收到此消息 :警告:ISO C++禁止可變長度數組's1'[-Wvla]:警告:ISO C++禁止可變長度數組's1'[-Wvla]
CRAN的維護者說錯誤在這部分代碼如下所示。我在想,爭論「NROWS」是多餘的,但我不知道是否有另一種方式來解決這個問題
double entCI(double input[], int cMatrix[], double partition,
int nrows, int begin, int end)
{
double s1[nrows], s2[nrows], entropy;
int cs1[nrows], cs2[nrows];
int s1Count=0, s2Count=0, sCount=0;
while(input[begin]<partition)
{
cs1[s1Count]=cMatrix[begin];
s1[s1Count++]=input[begin++];
}
while(begin<end)
{
cs2[s2Count]=cMatrix[begin];
s2[s2Count++]=input[begin++];
}
sCount=s1Count+s2Count;
entropy=(s1Count/double(sCount))*ent(s1,cs1,s1Count)
+(s2Count/double(sCount))*ent(s2,cs2,s2Count);
return entropy;
}
您的目標是?讓它起作用?或者讓它可移植正確的C++?使其工作的簡單選擇是禁用或忽略警告。該代碼使用C++中無效的C99功能,但您的C++編譯器支持該功能。爲了使其有效的可移植代碼,您應該將本地數組更改爲unique_ptr擁有的動態數組。 – JSF
@JSF這應該是一個答案。 – emlai