main.cpp中定义了一些宏,全局变量,还有结构体类型 #define P_NUM 100 #define GEN_MAX 500 #define T_NUM 5 #define A_NUM 10 ... double info_route[resource_fit_num][N_NUM][N_NUM]; double yita1_route[N_NUM][N_NUM]; double yita2_route[N_NUM][N_NUM]; ... typedef struct { int maxrank; int rankno[P_NUM]; individual ind[P_NUM], //individual也是个结构体类型 *ind_ptr; }population; population oldpop; fun.h定义如下 #ifndef FUN_H #define FUN_H void getLaterFitness(individual *accept); void fun(population *pop_ptr); #endif 在fun.cpp中需要用到main.cpp中定义的结构体,和宏定义 void fun(population *pop_ptr ) { int (*encode_ptr)[A_NUM], (*contri_ptr)[T_NUM][DIM], x[T_NUM][A_NUM], contri[A_NUM][T_NUM][DIM], *err_ptr; double *fitn_ptr, f[FUN_NUM] ; ... } 编译提示fun.cpp中没有定义。请问我该怎样在fun.cpp中声明,才能在其他cpp文件中使用main.cpp中定义的宏,全局变量,还有结构体类型。能不能将这些放入一个头文件然后在其他文件中include? |
|
10分 |
1、结构体和宏定义最好放到头文件里面,比如main.h。
2、调用其他cpp里定义的全局变量,只要在要使用的里面加个 extern population?oldpop; /*这个其实也可以放到一个main.h之类头文件里面*/ |
10分 |
恩,最好都放在头文件里,然后在cpp中包含即可,注意头文件里需要加入头文件保护,防止重定义。
|
非常感谢。按照你们说的做了,会出现如下链接错误:还得继续查了
checking.obj : error LNK2005: “double pcross” (?pcross@@3NA) 已经在 AntColony_Route.obj 中定义 1>checking.obj : error LNK2005: “double pmut” (?pmut@@3NA) 已经在 AntColony_Route.obj 中定义 1>cross.obj : error LNK2005: “double pcross” (?pcross@@3NA) 已经在 AntColony_Route.obj 中定义 1>cross.obj : error LNK2005: “double pmut” (?pmut@@3NA) 已经在 AntColony_Route.obj 中定义 1>fun.obj : error LNK2005: “double pcross” (?pcross@@3NA) 已经在 AntColony_Route.obj 中定义 1>fun.obj : error LNK2005: “double pmut” (?pmut@@3NA) 已经在 AntColony_Route.obj 中定义 |