首页 > 解决方案 > “void *”类型的值不能分配给“double *”类型的实体

问题描述

我无法编写一个必须使用梯形方法计算积分的 OpenMP 程序。

编译器对这些行尖叫:

x = calloc(n, sizeof(double));
y = calloc(n, sizeof(double));

错误 - “void *”类型的值不能分配给“double *”类型的实体

我正在使用 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++

解决方案


错误消息很清楚,解决方法也很简单。您需要在 C++ 中显式转换返回值calloc(与 C 不同)。也就是说,如果你真的需要在 C++ 中使用这种“基于 C”的例程......

    x = static_cast<double*>(calloc(n, sizeof(double)));
    y = static_cast<double*>(calloc(n, sizeof(double)));

推荐阅读