字母顺序嵌套数据结构c ++

时间:2015-04-20 07:26:28

标签: c++

我试图让我的代码以更有效的方式对嵌套数据结构的元素进行排序。这是我的一段代码:

 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] |

我该如何解决这个问题?

先谢谢你了!

2 个答案:

答案 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