我声明了以下的结构体:
         struct indiv
            {
               public int[] chr;
               public double fit;
            }  ;
   
           然后
           indiv    bestindiv=new indiv();
           indiv    worstindiv= new indiv();
           indiv    currentbest = new indiv();
           indivi[] pop = new indiv[500];
vs2010警告说  从未对字段“Bishop.gafor.indivl.chrom”赋值,字段将一直保持其默认值 null C:\Documents and Settings\Administrator\桌面\DSREA-MC2.3\Bishop\gafor.cs编译可以通过,但是运行的时候出错了。请教各位大侠,如何解决这个问题?

解决方案 »

  1.   

    哪来的chrom,你出错在哪出的错,你这几行应该不会出错
    另外  indivi[]写错了,应该是 indiv[]
      

  2.   

    一般用静态构造函数,  struct indiv
       {
       private static indiv s_default;
       static indiv()
       {
         s_default.chr=null;
         s_default.fit=0.0;
       }
       public static indiv Default
       {
          get
          {
                return s_default;
          }
       }   public int[] chr;
       public double fit;
       } ;   indiv bestindiv=indiv.Default;//这样就可以初始化成员, 
      

  3.   

    写代码过来的时候 写错了 你说的是对的 错误提示是从未对字段“Bishop.gafor.indivl.chr”赋值才是
      

  4.   

    有三个问题:
    数组的初始化就是null吗?
    chr数组的长度是50怎么做?长度不定又怎么办?
    结构体数组元素有500个每个都循环初始化一遍?
    请帮忙解答,谢谢
      

  5.   

    晕倒,如果长度不固定,最好的方法是使用带参数的构造函数:struct indiv
    {
    ...
        public indiv(int nArrayLength)
        {
             ....
             chr=new int[nArrayLength];
             //如果要初始化:
               for(int i=0;i<nArrayLength;i++)
             {
                chr[i]=...;
             }
     
        }
    }indiv bestindiv=new indiv(50);
      

  6.   

    500个元素的结构体数组,就比较麻烦,最好把初始化chr数组作为一个方法,struct indiv
    {
    ...
       public void initialize(int nArrayLength)
       {
       ....
       chr=new int[nArrayLength];
       //如果要初始化:
       for(int i=0;i<nArrayLength;i++)
       {
       chr[i]=...;
       }
      
      }  private static indiv s_default;
       static indiv()
       {
       s_default.chr=null;
       s_default.fit=0.0;
       }
       public static indiv Default
       {
       get
       {
       return s_default;
       }
       }}indivi[] pop = new indiv[500];
    for(int i=0;i<500;i++)
    {
       indivi[i]=indivi.Default;
       indivi[i].initialize(50);
    }