有没有大神来帮我看看怎么解决这个LNK2005的重复定义错误!

Yukkkki 2016-12-21 12:27:47
我在VS2015一编译就会报LNK2005的错误

可是我如果在.c文件里把使用list类里面的函数的语句注释掉就不会报错。
我是在头文件里声明了list类明并且实现了函数,为什么我在调用函数的时候回说我重复定义啊??
而且我在头文件里都加了#pragam once
跪求大神解救,困扰好久了都。
...全文
183 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yizhangbiao 2018-08-31
  • 打赏
  • 举报
回复
如果把实现放在h里面需要加inline或者static
Yukkkki 2016-12-21
  • 打赏
  • 举报
回复
引用 7 楼 qq423399099 的回复:
贴一下你的#include的部分的代码? [quote=引用 5 楼 Yukkkki 的回复:] [quote=引用 3 楼 qq423399099 的回复:] 贴一下你的#include的部分的代码。 该放在.cpp的里的代码不要放到.h里去
我没有在.cpp里写实现函数的代码我都是直接在.h里写好然后include直接调用的[/quote] 实现放在.c文件里,或者像楼上所说放在类内[/quote] 谢谢!十分感谢!
Yukkkki 2016-12-21
  • 打赏
  • 举报
回复
引用 6 楼 ri_aje 的回复:
[quote=引用 4 楼 Yukkkki 的回复:] [quote=引用 1 楼 ri_aje 的回复:] 1. c++ 语言编译单元扩展名不要用 .c,vs 系列会根据 .c 扩展名自动按 c 语言编译,可能导致各类奇怪问题。 2. 具体是否重定义,得看头文件到底怎么写的,发上来看看。pramga once 只能防止重复包含,不能解决重定义的问题。
这个我是List.h里对list类的声明,里面包含了形体类的头文件quad.h 下面是在list.h里面对list类中部分函数的实现 然后是quad.h里面部分形体类的实现 还有我看了一下那个文件的后缀是.cpp不是.c,我以为.c和.cpp都一样的[/quote] 把 list 类外的定义移到 cpp 或类内。 下次帖代码,这样别人想试一下的话直接复制粘贴就行了。[/quote] 好的!谢谢你!
小灸舞 2016-12-21
  • 打赏
  • 举报
回复
贴一下你的#include的部分的代码?
引用 5 楼 Yukkkki 的回复:
[quote=引用 3 楼 qq423399099 的回复:] 贴一下你的#include的部分的代码。 该放在.cpp的里的代码不要放到.h里去
我没有在.cpp里写实现函数的代码我都是直接在.h里写好然后include直接调用的[/quote] 实现放在.c文件里,或者像楼上所说放在类内
ri_aje 2016-12-21
  • 打赏
  • 举报
回复
引用 4 楼 Yukkkki 的回复:
[quote=引用 1 楼 ri_aje 的回复:] 1. c++ 语言编译单元扩展名不要用 .c,vs 系列会根据 .c 扩展名自动按 c 语言编译,可能导致各类奇怪问题。 2. 具体是否重定义,得看头文件到底怎么写的,发上来看看。pramga once 只能防止重复包含,不能解决重定义的问题。
这个我是List.h里对list类的声明,里面包含了形体类的头文件quad.h 下面是在list.h里面对list类中部分函数的实现 然后是quad.h里面部分形体类的实现 还有我看了一下那个文件的后缀是.cpp不是.c,我以为.c和.cpp都一样的[/quote] 把 list 类外的定义移到 cpp 或类内。 下次帖代码,这样别人想试一下的话直接复制粘贴就行了。
Yukkkki 2016-12-21
  • 打赏
  • 举报
回复
引用 3 楼 qq423399099 的回复:
贴一下你的#include的部分的代码。 该放在.cpp的里的代码不要放到.h里去
我没有在.cpp里写实现函数的代码我都是直接在.h里写好然后include直接调用的
Yukkkki 2016-12-21
  • 打赏
  • 举报
回复
引用 1 楼 ri_aje 的回复:
1. c++ 语言编译单元扩展名不要用 .c,vs 系列会根据 .c 扩展名自动按 c 语言编译,可能导致各类奇怪问题。 2. 具体是否重定义,得看头文件到底怎么写的,发上来看看。pramga once 只能防止重复包含,不能解决重定义的问题。
这个我是List.h里对list类的声明,里面包含了形体类的头文件quad.h 下面是在list.h里面对list类中部分函数的实现 然后是quad.h里面部分形体类的实现 还有我看了一下那个文件的后缀是.cpp不是.c,我以为.c和.cpp都一样的
小灸舞 2016-12-21
  • 打赏
  • 举报
回复
贴一下你的#include的部分的代码。
该放在.cpp的里的代码不要放到.h里去
paschen 版主 2016-12-21
  • 打赏
  • 举报
回复
.c文件不要#include,直接添加到工程 另外你试下把list换个其他的名字,不排除编译器将他与STL中的构成重名
ri_aje 2016-12-21
  • 打赏
  • 举报
回复
1. c++ 语言编译单元扩展名不要用 .c,vs 系列会根据 .c 扩展名自动按 c 语言编译,可能导致各类奇怪问题。 2. 具体是否重定义,得看头文件到底怎么写的,发上来看看。pramga once 只能防止重复包含,不能解决重定义的问题。

64,678

社区成员

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

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