从'long int'到'long int *'-fpermissive的无效转换

时间:2017-06-25 21:10:10

标签: c++

目前正在为学校做一个项目,我得到的任务是将C算法变成C ++(大约10个小时前,当我完成作业时,我开始学习C ++。)

做一个函数我收到了错误: [错误]无效从'long int'转换为'long int *'[-fpermissive]

这里我创建了一个在testInstance函数中使用的全局变量

    static long *c;                         // total capacity

这是有错误的函数。

    void testInstance (Exitem **f, Exitem **l, int n, int r, int type, int v){

        Exitem *a;

        *f = a;
        *l = &a[n-1];

        c = maketest(*f, *l, type, r, v);

    }

这是函数maketest(在行上调用,给出了错误)。

    long maketest (Exitem *F, Exitem *L, int type, int r, int v){

        register Exitem *J;
        register long sum;
        long c;
        short r1;

        sum = 0;
        r1 = r / 10;

        for (J = F; J <= L; J++){
            J->w = (longRand() % (r));

            switch (type){
                case 1:
                    J->p = (longRand() % (r)) + 1;
                    break;

                case 2:
                    J->p = (longRand() % (2*r1+1)) + J->w - r1;
                    if (J->p <= 0)
                        J->p = 1;
                    break;

                case 3:
                    J->p = J->w + 10;
                    break;

                case 4:
                    J->p = J->w;
                    break;  
            }

            sum += J->w;
        }
        c = sum / 2;
        return c;

    }

我的问题是:我到底做错了什么?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

maketest()的返回值很长。你把它写成c,它是指向long的类型指针。

这就是不匹配。

答案 1 :(得分:1)

您已声明:

static long *c;

但你的功能确实如此:

long maketest (Exitem *F, Exitem *L, int type, int r, int v)
{
    ...
    return c;
}

导致不匹配,因为返回类型为long,而c指针long