【问题标题】:invalid conversion from 'long int' to 'long int*' -fpermissive从“long int”到“long int*”的无效转换 -fpermissive
【发布时间】:2017-06-25 21:10:09
【问题描述】:

目前正在为学校做一个项目,我得到的任务是将一个 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;

    }

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

【问题讨论】:

标签: c++


【解决方案1】:

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

那就是不匹配。

【讨论】:

  • 它可以工作,现在我有很多其他错误,但我会尝试自己修复它们,然后再问另一个问题。
【解决方案2】:

您已声明:

static long *c;

但是你的函数可以:

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

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

【讨论】:

  • 虽然您发现了另一个错误,但它会被警告为 'long int*' 到 'long int',不是吗? IE。反过来。
  • @Yunnosch 我看到了你的回答,我们不是说同样的话吗? +1
  • 我们都发现了问题 - OP 现在也意识到了 - 并且感激不尽。请原谅吹毛求疵,但我认为您发现的问题不是导致标题中提到的确切警告 OP 的问题。我希望您的警告会是下一个警告,或者是上一个警告。 'long->long*' 不是 'long* ->long'。 +1
猜你喜欢
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 2019-09-22
  • 2019-11-19
相关资源
最近更新 更多