我试图使用Alglib的样条函数,为了做到这一点,我必须用我的数据初始化一个数组并将其传递给Alglib的样条函数。
我一直认为n_c必须是一个常数错误。有没有办法解决?我已经使用了矢量来获得积分。当我构建样条曲线时,大小不会改变。
void Connector::UniformSpacing(int n)
{
double arcL = Length();
double ds = arcL / ((double)n);
static const int n_c = points.size();
alglib::real_1d_array x[n_c]; // Error here, n_c is still not a constant
alglib::spline1dbuildcubic()
}
答案 0 :(得分:3)
仅仅因为变量是堆栈上的static const
对象并不意味着它是一个编译时常量:在首次调用该函数时,该变量在运行时初始化。但是,对于内置数组,大小需要在编译时知道。您可以将它设为constexpr
,在这种情况下,编译器将拒绝编译初始化,除非在编译期间可以计算出来。
使用运行时大小的最简单方法是使用
std::vector<alglib::real_1d_array> x(n_c);
对于这种类型,在编译时不需要知道大小。
答案 1 :(得分:0)
n_c必须是编译时间常量。
答案 2 :(得分:0)
如果需要一个只能在运行时指定其大小的数组,则需要使用无数动态大小的结构之一。根据您是否要将此新分配的数组的所有权传递给调用库,请使用以下两种结构之一:
std::unique_ptr<alglib::real_1d_array[]> x(new alglib::real_1d_array[n_c]);
libfunc
) - 您可以在release
上致电unique_ptr
并致电如下:libfunc(x.release())
。libfunc(x.get())
。当然,在&#34;保留所有权&#34;例如,假设图书馆不会释放这段记忆。