我试图让我的代码以更有效的方式对嵌套数据结构的元素进行排序。这是我的一段代码:
struct famous {
string name;
string emp;
int proes;
int mins;
string mit;
};
struct personal {
famous per[500];
int np;
};
void delete(personal & p, int ndx){
int mid = p.np;
for (int i=ndx; i<mid-1; i++){
p.per[i].name = p.per[i+1].nom;
p.per[i].emp = p.per[i+1].emp;
p.per[i].mins = p.per[i+1].mins;
p.per[i].mit = p.per[i+1].mit;
}
p.np = mid-1;
}
void sort(personal & p){
string tmp;
int pers;
personal vtmp;
pers = p.np;
tmp = p.per[0].name;
for (int pos=0; pos<pers; pos++){
for (int ndx=1; ndx<p.np; ndx++){
if (tmp>p.per[ndx].name){tmp=p.per[ndx].name;}
}
vtmp.per[pos] = p.per[ndx]; //line 107
deletePers(p,ndx);
tmp = p.per[0].name;
}
}
当我尝试编译代码时出现问题,我明白了:
D:\ main.cpp | 107 |错误:'ndx'的名称查找已更改为ISO'for'scoping [-fpermissive] |
我该如何解决这个问题?
先谢谢你了!
答案 0 :(得分:2)
尝试此功能
void sort(personal & p){
int ndx =1; // declare ndx at the starting of sor function
string tmp;
int pers;
personal vtmp;
pers = p.np;
tmp = p.per[0].name;
for (int pos=0; pos<pers; pos++){
for (ndx=1; ndx<p.np; ndx++){ // remove int here
if (tmp>p.per[ndx].name){tmp=p.per[ndx].name;}
}
vtmp.per[pos] = p.per[ndx]; //line 107
deletePers(p,ndx);
tmp = p.per[0].name;
}
}
正在使用for (int ndx=1; ndx<p.np; ndx++){
ndx
的范围仅保留在for循环中,因此无法在外部循环使用它。
因此,在循环外声明ndx
会很好。
答案 1 :(得分:1)
for (int pos=0; pos<pers; pos++){
for (int ndx=1; ndx<p.np; ndx++){
if (tmp>p.per[ndx].name){tmp=p.per[ndx].name;}
}
vtmp.per[pos] = p.per[ndx];//line 107
范围ndx
不在for循环之外。
在for for。之外宣布它。
同时将delete()
功能重命名为delete
保留,
p.per[i].name = p.per[i+1].nom; //should be per[i+1].name