两个CPP包含同一个头文件重复定义,不过我在头文件中用了宏定义

Myson_is_zhanglin 2015-09-20 07:14:05
...全文
1076 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2015-09-20
  • 打赏
  • 举报
回复
外部变量声明放在头文件,并且加上 extern 存储声明符 外部变量,定义放在某个CPP中,C语言放在.c 中
Myson_is_zhanglin 2015-09-20
  • 打赏
  • 举报
回复
引用 2 楼 bluewanderer 的回复:
加保护只能避免同一个cpp内的重复包含一个头,两个cpp本来也要分别包含的。

如果想一个头给多个cpp用,那就不要在头里放实体的定义(比如你这里的全局变量)。你这种情况全局变量应该在头里声明(前面加extern),然后只在一个cpp里写定义(假设你真两个cpp都用的话)。
我把头文件的定义放到外面在create.cpp用extern但是有了新错误
Myson_is_zhanglin 2015-09-20
  • 打赏
  • 举报
回复
引用 1 楼 cjqpker 的回复:
你这里定义了一些全局变量,然后估计在其他的cpp中又定义了一次,导致重复定义。
解决办法是 在头文件的定义式之前,加上 extern,比如:
extern LinkList head;
这样,头文件中表明,此变量实在别处定义的,链接动作 就正常了。
在main函数调用create函数出错
bluewanderer 2015-09-20
  • 打赏
  • 举报
回复
加保护只能避免同一个cpp内的重复包含一个头,两个cpp本来也要分别包含的。 如果想一个头给多个cpp用,那就不要在头里放实体的定义(比如你这里的全局变量)。你这种情况全局变量应该在头里声明(前面加extern),然后只在一个cpp里写定义(假设你真两个cpp都用的话)。
假正经的班长 2015-09-20
  • 打赏
  • 举报
回复
你这里定义了一些全局变量,然后估计在其他的cpp中又定义了一次,导致重复定义。 解决办法是 在头文件的定义式之前,加上 extern,比如: extern LinkList head; 这样,头文件中表明,此变量实在别处定义的,链接动作 就正常了。
升级版本。与之前版本相比,有如下改动: 1. 在objdir中生成与source相似的目录树,防止不同source目录下同名的源文件生成的obj文件相互覆盖。 2. 在编译过程中,默认显示短命令。可以通过变量设置切换为显示长命令。 3. 用户可自扩展编译规则。 ========================================================== 模板中用到的可配置的变量列表: DEFINES: 定义编译参数,一般用-U或者-D进行定义。 EXTRA_CFLAGS: 定义其它的编译参数 inc-y: 头文件搜索目录 src-y: 源文件列表。其中以/结尾的表示目录,其它的表示文件。 SOURCE_SUFFIXES: 源文件后缀名。在src-y指定的目录中搜索以$(SOURCE_SUFFIXES)为后缀的文件,加入到源文件列表中。 例如: src-y = dir1/ dir2/ file9.c SOURCE_SUFFIXES := c cpp 最终形成的源文件列表为: dir1/*.c dir1/*.cpp dir2/*.c dir2/*.cpp file9.c obj-y: 加入连接的obj文件列表。通常这些obj文件不通过源文件编译产生。 ucmd_X: 自定义后缀名为X的源文件的编译规则。 EXCLUDE_FILES: 不参与编译的源文件列表。 OBJECT_DIR:obj文件的输出目录。 LIBS:连接时需要的lib文件。 LDFLAGS:连接参数。 OBJECT_SUFFIX: obj文件的后缀名 DEPEND_SUFFIX: depend文件的后缀名 TARGET: 整个工程最终产生的target文件名。 TARGET_TYPE: $(TARGET)类型。 TARGET_DEPENDS: $(TARGET)的依赖。 CENTRALIZED_SINGLE_DEPEND_FILE: 将所有依赖关系集中生成到同一个depend文件中。默认是每个obj产生一个单独的depend文件。 VERBOSE_COMMAND: 编译过程中显示完整的命令。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧