无效的将“long int”转换为“long int*” -fpermissive

3

目前正在学校做一个项目,我的任务是将一个C算法转换成C++(我在10小时之前开始学习C++,当我拿到这个任务时)。

在编写一个函数时,我遇到了错误:

[错误] invalid conversion from 'long int' to '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
有趣的趣闻:register 关键字现在已经不起作用了。如果编译器可以做得更好,它会完全忽略 register。更多信息请参见:https://dev59.com/7nA75IYBdhLWcg3wm6Qj - user4581301
圣指针,蝙蝠侠! - Lightness Races in Orbit
2个回答

3

maketest() 的返回值是 long 类型。你将这个 long 值写入了一个指向 long 类型的指针 c 中。

这就是不匹配的地方。


它可以运行了,但现在我有很多其他的错误,但我会尝试在提出另一个问题之前自己修复它们。 - Carlos Ramírez

1

你已经声明:

static long *c;

但是你的函数做了什么:
long maketest (Exitem *F, Exitem *L, int type, int r, int v)
{
    ...
    return c;
}

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


当你发现另一个错误时,它会被警告为“long int *”到“long int”,不是吗?也就是说,反过来。 - Yunnosch
@Yunnosch,我看到你的回答了,我们不是在说同样的事情吗?+1 - gsamaras
我们都发现了问题 - OP现在也意识到了,并感激不尽。请原谅我挑剔,但我认为你发现的问题并不是导致OP在标题中提到的确切警告的问题。我想你发现的将是下一个警告或上一个警告。'long->long*'不是'long* ->long'。+1 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接