函数无法识别变量

时间:2020-05-03 13:27:49

标签: c++

我正在编写一个程序,以模拟病毒在人体内的传播。

我收到一条错误消息,它指出在check_up函数范围内未识别出“ cap”。这是下面的函数以及调用它的函数。

void check_up(){
    for(int i=0;i<500;i++){
        for(int j=0;j<500;j++){
            if(hospital_stat[i][j]==1 && hospital[i][j].state!="Masked" && hospital[i][j].inICU == false){
                int orth=0;

                if(i-1>=0 && j-1>=0 && hospital_stat[i-1][j-1]==1 && hospital[i-1][j-1].state=="Sick" && !hospital[i-1][j-1].inICU)
                    orth++;

                if(i+1<500 && j+1<500 && hospital_stat[i+1][j+1]==1 && hospital[i+1][j+1].state=="Sick" && !hospital[i+1][j+1].inICU)
                    orth++;

                if(i-1>=0 && j+1<500 && hospital_stat[i-1][j+1]==1 && hospital[i-1][j+1].state=="Sick" && !hospital[i-1][j+1].inICU)
                    orth++;

                if(i+1<500 && j-1>=0 && hospital_stat[i+1][j-1]==1 && hospital[i+1][j-1].state=="Sick" && !hospital[i+1][j-1].inICU)
                    orth++;

                if(i+1<0 && hospital_stat[i+1][j]==1 && hospital[i+1][j].state=="Sick" && !hospital[i+1][j].inICU)
                    orth++;

                if(i-1>=0 && hospital_stat[i-1][j]==1 && hospital[i-1][j].state=="Sick" && !hospital[i-1][j].inICU)
                    orth++;

                if(j-1>=0 && hospital_stat[i][j-1]==1 && hospital[i][j-1].state=="Sick" && !hospital[i][j-1].inICU)
                    orth++;

                if( j+1<500 && hospital_stat[i][j+1]==1 && hospital[i][j+1].state=="Sick" && !hospital[i][j+1].inICU)
                    orth++;

                if(hospital[i][j].recovery>28 && cap>0){
                    hospital[i][j].inICU = true;
                    cap--;
                }
                if(hospital[i][j].state=="Sick"){
                    hospital[i][j].recovery--;
                    if(hospital[i][j].recovery==0)
                        hospital[i][j].state="Healthy";
                }
                if(orth>1 && hospital[i][j].state!="Healthy"){
                    hospital[i][j].state="Sick";
                    hospital[i][j].recovery += (14+(orth*7));
                }
                if(orth>2)
                    hospital[i][j].death--;
                }
            }
        }
}
void simulate(int rows, int cols, int cap, int out_time){
    for(int t=0;t<=out_time;t++){
        check_up();
        new_case(t);
    }
}
int main()
{
    int rows, cols, cap, out_time, n, t, prow, pcol;

    string name, state;

    init_matrix();

    cin>>rows>>cols>>cap>>out_time>>n;

    while(n--){
        cin >> t>>prow>>pcol>>name>>state;
        patient p(name, state, prow, pcol);
        tarr[t].push_back(p);
    }
    simulate(rows,cols,cap,out_time);

    return 0;
}

我不确定问题出在哪里。我觉得这很简单,但是我不确定。有人知道错误是什么吗?

2 个答案:

答案 0 :(得分:0)

因此cap中没有声明check_up,这就是编译器正确告诉您的内容。

capmainsimulate中声明(作为参数),但不在check_up中声明。

假设cap中的simulate与您要在cap中使用的check_up是同一件事,那么您需要将cap作为参数传递给check_up的方式与将其传递给simulate的方式完全相同。

答案 1 :(得分:0)

您必须将功能void check_up()例如更改为void check_up(int cap)cap在第一个调用的函数void simulate(...)中是已知的。

在访问数组时也要注意边界错误。