Причина, по которой вы получаете ошибку, состоит в том, что массивы переменной длины не являются частью стандартного C ++. Это важно для вашего определения tmp
:
int tmp[sz-1], i=0; //sz is not known at compile-time, therefore, this is invalid code
Некоторые компиляторы разрешают подобный код, разрешая VLA, но не будучи стандартными, вы должны использовать другое решение. Обычно для таких задач идеально подходит std::vector
:
std::vector<int> tmp(sz - 1);
int i = 0;
Это должно скомпилироваться (при условии, что вы #include<vector>
вместе с другими включенными вами), и должно иметь поведение, ожидаемое от вашего кода.