我有一个Nx3数组,我需要将其作为一个函数填充(因此矢量不是一个选项)。我已经知道N有多大,因为我将它作为参数提供给函数。我仍然得到这个“必须有一个恒定值”的愚蠢错误,我的代码是:
double bspline_plot(double CP[], double Knot[], const int N, int d, int ncontrol, double *A){
// CP are the control points
//Knot is the knot vector
//N is the number of internal point you want in each segment
//d is the degree of the polynomials
double min_x, max_x, dx;
double *x_1;
x_1 = new double[N];
double A[N][2];
int i, j, M, L;
min_x = min(Knot);
max_x = max(Knot);
dx = (max_x - min_x) / N;
for (i = 0; i <= N; i = i + 1)
{
x_1[i] = min_x + dx*i;
}
M = ncontrol;
L = (sizeof(Knot) / sizeof(*Knot));
if (L < d + M + 1) // This checks if the number of control points are positive
{
printf("Incorrectly defined knot vector\n");
return;
}
else //This is the Cox - deBoor algorithm
{
for (i = 0; i <= N; i = i + 1)
{
for (j = 0; j <= L - 1; j = j + 1)
{
A[i][1] = A[i][1] + CP[j, 1] * CdB(j, d, x_1[i], Knot);
A[i][2] = A[i][2] + CP[j, 2] * CdB(j, d, x_1[i], Knot);
A[i][3] = A[i][3] + CP[j, 3] * CdB(j, d, x_1[i], Knot);
}
A[N][1] = CP[L, 2];
A[N][2] = CP[L, 2];
A[N][3] = CP[L, 1];
}
}
return A;
}
我的另一个选择是输入一个数组,然后在函数中找到它的值,但这看起来有点傻。
答案 0 :(得分:3)
尝试以下列方式使用std :: vector:
std::vector<std::vector<double>> A( N );
for( auto& row : A )
row.resize( M );
或
std::vector<std::vector<double>> A( N, std::vector<double>( M ));
答案 1 :(得分:1)
通过快速检查,您的C ++代码中的问题似乎是以下数组声明:
double A[N][2];
您需要按如下方式动态分配此二维数组:
double** A = new double*[N];
for (int i=0; i<N; ++i)
A[i] = new double[2];
有关详细信息,请查看this SO文章。
答案 2 :(得分:0)
最后我不得不将A分成三个向量,并将函数的输出从double更改为void,并将(现在)三个向量读入为double *。然后,我可以只更改向量的内容,现在它没有显示任何错误。