请教一个菜鸟问题 : 头文件重复包含,link时会报错.如何解决?

时间:2021-01-18 16:49:04
情况是这样:

工程中有
ConstantDefine.h
main.cpp 
classA.h classA.cpp

其中,ConstantDefine.h 中定义了常量
int SCREEN_WIDTH = 640;
int      SREEN_HEIGHT = 480;

在main.cpp中包含了 ConstantDefine.h
在classA.h中也包含了 ConstantDefine.h.

所有的.h文件,我都用 
#ifndefine #define #endif 做了防止多次包含的处理(也试了 #pragma once,效果相同).

但是在编译的时候没有错误,链接的时候依然提示我

1>main.obj : error LNK2005: "int SCREEN_WIDTH" (?SCREEN_WIDTH@@3HA) already defined in dxManager.obj
1>main.obj : error LNK2005: "int SCREEN_HEIGHT" (?SCREEN_HEIGHT@@3HA) already defined in dxManager.obj


如何解决?

我在网上查了不少,还是没找到解决办法.复制粘贴的就别回复了.

求明白的前辈指点,谢谢!

8 个解决方案

#1


所有h里加extern。extern int some_var;
然后只在一个cpp里实际定义这个变量

#2



其中,ConstantDefine.h 中定义了常量
int SCREEN_WIDTH = 640;
int SREEN_HEIGHT = 480;


--->


//ConstantDefine.h 中定义常量要加上const
const int SCREEN_WIDTH = 640;
const int SREEN_HEIGHT = 480;

#3


头文件里只声明,定义放在源文件里

#4


引用 1 楼 fancymouse 的回复:
所有h里加extern。extern int some_var;
然后只在一个cpp里实际定义这个变量
++

#5


头文件中用extern,在一个cpp中定义。

#6


msdn里面给了三种方法,1楼的方法是可行的

#7


谢谢各位热心帮忙!

#8


#ifndef FLAG
#define FLAG
//code
#endif

#1


所有h里加extern。extern int some_var;
然后只在一个cpp里实际定义这个变量

#2



其中,ConstantDefine.h 中定义了常量
int SCREEN_WIDTH = 640;
int SREEN_HEIGHT = 480;


--->


//ConstantDefine.h 中定义常量要加上const
const int SCREEN_WIDTH = 640;
const int SREEN_HEIGHT = 480;

#3


头文件里只声明,定义放在源文件里

#4


引用 1 楼 fancymouse 的回复:
所有h里加extern。extern int some_var;
然后只在一个cpp里实际定义这个变量
++

#5


头文件中用extern,在一个cpp中定义。

#6


msdn里面给了三种方法,1楼的方法是可行的

#7


谢谢各位热心帮忙!

#8


#ifndef FLAG
#define FLAG
//code
#endif