DEV C++编译器报错[Error]invalid conversion from 'int*'to'int'[-fpermissive]

新人求助!DEV C++编译器报错[Error]invalid conversion from 'int*'to'int'[-fpermissive]

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n],lz=0,bh=0,xc[10];
    memset(xc,0,sizeof(xc));
    for(int i=0; i<n; i++)
    {
        cin>>a[i];
        xc[a[i]]++;
        for(int j=0; j<a[i]; j++)
        {
            xc[j]=0;
        }
        for(int t=xc+1; t<=10; t++)
        {
            xc[t]=0;
        }
        if(xc[a[i]]>lz)
        {
            bh=a[i];
            lz=xc[a[i]];
        }
    }
    cout<<lz;
    return 0;
}
 

第18行的for(int t=xc+1; t<=10; t++) 里的xc是int数组,不能和int型整数混用。这个题目是求什么?

还可以这么写

        for(int * t=xc+1; t<=xc+10; t++)
        {
            *t=0;
        }

【以下回答由 GPT 生成】

问题是由于int a[n]这行代码引起的。在标准C++中,数组的大小必须是一个常量表达式,即编译时可确定的值。但是在这里,变量n的值在运行时才能确定,因此编译器会报错。

要解决这个问题,可以使用动态内存分配来替代数组的声明。具体步骤如下:

  1. 删除int a[n]这行代码。
  2. 在main函数中添加以下代码:
int *a = new int[n];

这将在堆上动态分配一个大小为n的int数组,并将指针a指向该数组。

  1. 修改你对a的引用,以反映这个改变。例如,将cin>>a[i]改为cin>>*(a+i)。

  2. 在程序结束前,使用delete[]来释放动态分配的内存。在return 0;之前,添加以下代码:

delete[] a;

这样做可以确保在程序运行结束时释放内存,避免内存泄漏。

修改后的代码如下所示:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int *a = new int[n];
    int lz=0,bh=0,xc[10];
    memset(xc, 0, sizeof(xc));
    for(int i=0; i<n; i++)
    {
        cin>>*(a+i);
        xc[*(a+i)]++;
        for(int j=0; j<*(a+i); j++)
        {
            xc[j]=0;
        }
        for(int t=xc+1; t<=10; t++)
        {
            xc[t]=0;
        }
        if(xc[*(a+i)]>lz)
        {
            bh=*(a+i);
            lz=xc[*(a+i)];
        }
    }
    cout<<lz;
    delete[] a;
    return 0;
}

请注意,由于使用了动态内存分配,因此你需要负责在适当的时候释放内存,以避免内存泄漏。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^