定义了2个宏 
定义了一个结构体和一些变量,其中使用到了这2个宏
#define POPSIZE 20 
#define DIMENSION 2
typedef struct 

float number[DIMENSION]; 
float best[DIMENSION]; 
float bestfitness; 
float fitness; 
float speed[DIMENSION]; 
int Total;
float Sum;
float Avg;
} indi;float P[DIMENSION]; 
float PBEST;
indi individual[POPSIZE];
还做了一个界面,需要改变这两个宏的值。如果将POPSIZE、DIMENSION 定义为int型的变量,则报错,有没有什么方法解决这个问题,最终结果是要在界面里设置POPSIZE、DIMENSION 的值,传到函数里。而且结构体和数组的定义又不受影响。谢谢!

解决方案 »

  1.   

    还做了一个界面,需要改变这两个宏的值。如果将POPSIZE、DIMENSION 定义为int型的变量,则报错,有没有什么方法解决这个问题,最终结果是要在界面里设置POPSIZE、DIMENSION 的值,传到函数里。而且结构体和数组的定义又不受影响。谢谢!
    ============
    数组只能用常量作维数,你可以用动态数组
    比如:float best[DIMENSION]; 
    你可以改成float *best;定义成指针,在使用时先分配空间:best=new float[DIMENSION];要注意的是,因为是new出来的,所以在不用时一定要delete[] ...
      

  2.   

    那还能实现这个值的改变么?因为这是一个算法的维度和长度,如果不改变就没什么意义了
    =============
    上面的DIMENSION可以是常量,也可以是变量,当然可以改变了。
      

  3.   

    只能:
    typedef struct 

    float *pnumber; 
    float *pbest; 
    float bestfitness; 
    float fitness; 
    float *pspeed; 
    int Total;
    float Sum;
    float Avg;
    } indi;
    //然后动态分配pnumber=
      

  4.   

    pbest=new float[DIMENSION];  这里的DIMENSION可以是变量么?
      

  5.   

    静态数组的维数需要是常量.你用 const int 应该是可以的。
    const  int POPSIZE = 20 ;
    const  int DIMENSION = 2 ;typedef struct 

    float number[DIMENSION]; 
    float best[DIMENSION]; 
    float bestfitness; 
    float fitness; 
    float speed[DIMENSION]; 
    int Total;
    float Sum;
    float Avg;
    } indi;float P[DIMENSION]; 
        float PBEST;
    indi individual[POPSIZE];
    要想动态改变大小,就需要用动态数组了。(C++ 的new , 或C的malloc),要记得不用的时候释放掉(C++的delete,C的free)。
      

  6.   

    为什么不用STL vector 呢?
      

  7.   

    为什么我定义的动态数组的指针初始化为0x00000000float DIMENSION;
    float POPSIZE;
    float *pnumber=new float[DIMENSION];
    float *pbest=new float[POPSIZE];
    cin>>DIMENSION;
    cout<<pnumber<<endl;cin>>POPSIZE;
    cout<<pbest<<endl;
    另外一个代码是:float N;
    float s=0;
    cout<<"请输入数组长度"<<endl;
    cin>>N;
    float *f=new float[N];//分配动态数组
    cout<<f<<endl;
    cout<<"请输入数组的值"<<endl;这个动态指针的初始化值不是0
      

  8.   

    我知道答案了,先要确定DIMENSION和POPSIZE的值,在定义动态数组,否则内存报错!
      

  9.   

    float DIMENSION;
    float POPSIZE;

    float *pnumber=new float[DIMENSION];
    float *pbest=new float[POPSIZE];
    这样合适么?
      

  10.   

    float DIMENSION;
    float POPSIZE;
    float *pnumber=new float[DIMENSION];
    float *pbest=new float[POPSIZE];
    cin>>DIMENSION;
    cout<<pnumber<<endl;cin>>POPSIZE;
    cout<<pbest<<endl;
    ========
    反了,改成:
    float DIMENSION;
    float POPSIZE;
    cin>>DIMENSION;
    cout<<pnumber<<endl;cin>>POPSIZE;
    cout<<pbest<<endl;float *pnumber=new float[DIMENSION];
    float *pbest=new float[POPSIZE];
      

  11.   

    一样的,比如定义成:
    typedef struct  
    {  
    float *pnumber;  
    float *pbest;  
    float bestfitness;  
    float fitness;  
    float *pspeed;  
    int Total;
    float Sum;
    float Avg;
    } indi;
    然后定义indi a;
    分配内存:a.pnumber=new float[长度变量];