Code Bye

C++中全局变量的访问及结构体类型的定义问题。

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 中定义

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++中全局变量的访问及结构体类型的定义问题。