没有重复定义了,怎么还报LNK2005?

flamkuavos 2012-08-27 03:44:35
我在一个disk.h文件中实现了一个通用函数,整个h文件内容如下
//disk.h
//磁盘相关函数
#ifndef __DISK_DEF_H__
#define __DISK_DEF_H__

#include <sys/types.h> //struct _stat
#include <sys/stat.h> //_stat函数

ULONGLONG disk_filegetsize(IN const char* filefullpath)
{
FILE* fp = fopen(filefullpath, "r");
if(!fp)
{
return -1;
}
fclose(fp);
fp = NULL;

struct _stat st;
if(_stat(filefullpath,&st) == 0)
{
return st.st_size;
}
return -1;
}


#endif//__DISK_DEF_H__


在某MFC工程的两个cpp文件(MainDlg.cpp和DlgParam.cpp)中都需要使用disk.h中那个disk_filegetsize,于是都包含了disk.h,却报错:

MainDlg.obj : error LNK2005: "unsigned __int64 __cdecl disk_filegetsize(char const *)" (?disk_filegetsize@@YA_KPBD@Z) already defined in DlgParam.obj

这个应该怎么改?
PS:我不想把disk.h中的函数实现分成声明和定义两部分,并分别放到h和cpp中,只想全部放在h中,包含起来简洁。
...全文
85 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
flamkuavos 2012-09-23
  • 打赏
  • 举报
回复
static 或者 inline就对了,不过原因理解还不透彻
xiaohuh421 2012-08-27
  • 打赏
  • 举报
回复
你应该把函数声明放在头文件中,把定义放到.cpp中, 由于你的头文件多处包含了,所以函数会报这个错了.
  • 打赏
  • 举报
回复
inline一下 或者static一下
漫步者、 2012-08-27
  • 打赏
  • 举报
回复
你再试一试,那个.cpp文件删掉,把他的定义放到头文件中去,应该是可以的。

64,654

社区成员

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

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