我正在编写一个程序,以模拟病毒在人体内的传播。
我收到一条错误消息,它指出在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;
}
我不确定问题出在哪里。我觉得这很简单,但是我不确定。有人知道错误是什么吗?
答案 0 :(得分:0)
因此cap
中没有声明check_up
,这就是编译器正确告诉您的内容。
cap
在main
和simulate
中声明(作为参数),但不在check_up
中声明。
假设cap
中的simulate
与您要在cap
中使用的check_up
是同一件事,那么您需要将cap
作为参数传递给check_up
的方式与将其传递给simulate
的方式完全相同。
答案 1 :(得分:0)
您必须将功能void check_up()
例如更改为void check_up(int cap)
。 cap
在第一个调用的函数void simulate(...)
中是已知的。
在访问数组时也要注意边界错误。