我在编写一个OpenMP程序时失败了,该程序必须使用梯形方法计算积分。
编译器对着这些行尖叫:
x = calloc(n, sizeof(double));
y = calloc(n, sizeof(double));
错误-类型为"的值;void*";无法分配给的实体类型";双*";
我使用的是Visual Studio 15,是的,我在属性中启用了OpenMP支持。
以下是导致错误的程序部分:
#define N 4
double start_time, end_time, time;
float f(float x)
{
return(pow(x, 3));
}
void main() {
start_time = omp_get_wtime();
int i, n; double *x, *y;
double x0, xn, h, so, ans;
x0 = 0;
xn = 2;
h = 0.1;
n = (xn - x0) / h;
if (n % 2 == 1)
{
n = n + 1;
}
x = calloc(n, sizeof(double));
y = calloc(n, sizeof(double));
错误消息很清楚,解决方法也很简单。您需要显式强制转换C++中calloc
的返回值(与C不同(。也就是说,如果你真的需要使用这样的";基于C的";C++中的例程。。。
x = static_cast<double*>(calloc(n, sizeof(double)));
y = static_cast<double*>(calloc(n, sizeof(double)));