编译器提示“[Error] invalid conversion from 'int' to 'int*' [-fpermissive]”

问题描述 投票:0回答:1

我使用 TDM-GCC 4.9.2 64 位版本(Bloodshed Dev-C++ 中内置的版本)编译了以下代码:

#include <iostream>
using namespace std;
const int MAXN=1005;
int a[MAXN],b[MAXN],c[MAXN];

void input(int a[]){
    string s;
    cin >> s;
    int len=s.length();
    for(int i=0;i<MAXN;i++) a[i]=0;
    for(int i=len-1;i>=0;i-=4){
        a[0]++;
        for(int j=max(0,i-3);j<=i;j++){
            a[a[0]] *= 10;
            a[a[0]] += s[j]-'0';
        }
    }
}

void output(int a[]){
    for(int i=a[0];i;i--){
        if(i==a[0])
            cout << a[i];
        else{
            int tmp=1000;
            for(int j=1;j<=4;j++){
                cout << a[i]/tmp%10;
                tmp /= 10;
            }
        }
    }
}

void add(int c[],int a[],int b[]){
    for(int i=0;i<MAXN;i++) c[i]=0;
    c[0]=max(a[0],b[0]);
    for(int i=1;i<=c[0];i++){
        if(i<=a[0]) c[i]+=a[i];
        if(i<=b[0]) c[i]+=b[i];
    }
    for(int i=1;i<=c[0];i++){
        c[i+1] += c[i]/10000;
        c[i] %= 10000;
    }
    while(c[c[0]+1]>0){
        c[0]++;
        c[c[0]+1] = c[c[0]]/10000;
        c[c[0]] %= 10000;
    }
}

int main(){
    int t,c=0;
    cin >> t;
    for(int r=0;r<t;t++){
        input(a);
        input(b);
        add(c,a,b);
        cout << "Case " << ++c << ":" << endl;
        output(a);
        cout << " + ";
        output(b);
        cout << " = ";
        output(c);
        cout << endl << endl;
    }
    return 0;
}

这是针对这个问题编写的一段高精度加法代码。 当我编译时,编译器报告以下错误: 我不知道这个错误,请问我该如何修复它?

c++
1个回答
0
投票

总结并回答主要问题,在 main 中本地声明的 int 变量 c 掩盖了全局 int 数组的声明,也称为 c。

int main(){
    int t,c=0; //This variable shadows global array called c
    cin >> t;
    for(int r=0;r<t;t++){
        input(a);
        input(b);
        add(c,a,b);
        cout << "Case " << ++c << ":" << endl;
        output(a);
        cout << " + ";
        output(b);
        cout << " = ";
        output(c);
        cout << endl << endl;
    }
    return 0;
}

正如其他人指出的,在 C++ 中你最好使用 STL 数组。即更换

const int MAXN = 1005;
int a[MAXN],b[MAXN],c[MAXN];

constexpr std::size_t MAXN = 1005;
std::array<int, MAXN> a, b, c;

(函数参数类型相同)

此外,最好避免使用单字母变量名称并提供更具描述性的名称,这可以避免遮盖已使用的字母:)

© www.soinside.com 2019 - 2024. All rights reserved.