两个hpp #include 了同一个hpp导致multiple definition of 'xxxx' . #ifndef #define #end没生效?

baidu_28726667 2019-06-21 02:37:19
1. main 文件 #include了 a.hpp
2. a.hpp 和 b.hpp 都 #include c.hpp
3. c.hpp和a, b.hpp有些不同,a和b里面是class. 但是c里面并没有class. 里面的内容为 namespace c{ 函数a, 函数b, 函数c }
4. 所有hpp都有 #ifndef #define #endif
5. 就是编译报错: main.cpp multiple definition of ' namespace c 的函数a,b,c'


请问这个 #ifndef #define #endif 是没有生效吗?
...全文
637 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
android2008 2019-06-21
  • 打赏
  • 举报
回复
引用 9 楼 baidu_28726667 的回复:
[quote=引用 8 楼 android2008 的回复:]
感觉是:
有一个main.cpp之外的cpp文件include了b.hpp,其实相当于include了c.hpp
c.hpp实现了函数a,b,c
然后link的时候报错了
这样看起来才合理


因为main.cpp #include了 a.hpp, 而 a.hpp #include 了 c.hpp. 那样子相当于 main.cpp也 #include 了 c.hpp .但是 c.hpp里面已经有 #ifndef _C_HPP #define _C_HPP #endif 。 这样还会有问题?![/quote]

我的意思是你还有另一个cpp文件直接或间接include了 c.hpp
另外你在c.hpp实现了函数a,b,c
你可以贴出部分c.hpp的代码
baidu_28726667 2019-06-21
  • 打赏
  • 举报
回复
引用 8 楼 android2008 的回复:
感觉是: 有一个main.cpp之外的cpp文件include了b.hpp,其实相当于include了c.hpp c.hpp实现了函数a,b,c 然后link的时候报错了 这样看起来才合理
因为main.cpp #include了 a.hpp, 而 a.hpp #include 了 c.hpp. 那样子相当于 main.cpp也 #include 了 c.hpp .但是 c.hpp里面已经有 #ifndef _C_HPP #define _C_HPP #endif 。 这样还会有问题?!
android2008 2019-06-21
  • 打赏
  • 举报
回复
感觉是:
有一个main.cpp之外的cpp文件include了b.hpp,其实相当于include了c.hpp
c.hpp实现了函数a,b,c
然后link的时候报错了
这样看起来才合理
android2008 2019-06-21
  • 打赏
  • 举报
回复
晕,上面的a.hpp应该是c.hpp
android2008 2019-06-21
  • 打赏
  • 举报
回复
如果有#ifndef #define #endif,感觉compile不会有这样的错误,link才有可能报这样的错(如果还有一个cpp文件include了a.hpp, 而且a.hpp里实现了函数a,b,c)
gouyanfen 2019-06-21
  • 打赏
  • 举报
回复
引用 1 楼 gouyanfen 的回复:
头文件中的#ifdef 并不会检查其它头文件
我的描述并不准确,是头文件是单独生成符号库的,最后才链接
baidu_28726667 2019-06-21
  • 打赏
  • 举报
回复
引用 3 楼 android2008 的回复:
如果有#ifndef #define #endif ,应该不会有这样的编译错误 详细错误信息是什么?
main.cpp multiple definition of ' c::函数a' main.cpp multiple definition of ' c::函数b' main.cpp multiple definition of ' c::函数c'
android2008 2019-06-21
  • 打赏
  • 举报
回复
如果有#ifndef #define #endif ,应该不会有这样的编译错误
详细错误信息是什么?
baidu_28726667 2019-06-21
  • 打赏
  • 举报
回复
引用 1 楼 gouyanfen 的回复:
头文件中的#ifdef 并不会检查其它头文件
编译器不是会检查吗? 已经预处理了一个 #define xxxx , 另外一个文件#include的时候不是应该检查到已经 #define了 xxxx吗
gouyanfen 2019-06-21
  • 打赏
  • 举报
回复
头文件中的#ifdef 并不会检查其它头文件

64,646

社区成员

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

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