首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

没有重复定义了,如何还报LNK2005

2012-09-24 
没有重复定义了,怎么还报LNK2005?我在一个disk.h文件中实现了一个通用函数,整个h文件内容如下C/C++ code//

没有重复定义了,怎么还报LNK2005?
我在一个disk.h文件中实现了一个通用函数,整个h文件内容如下

C/C++ code
//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中,包含起来简洁。

[解决办法]
你再试一试,那个.cpp文件删掉,把他的定义放到头文件中去,应该是可以的。
[解决办法]
inline一下 或者static一下
[解决办法]
你应该把函数声明放在头文件中,把定义放到.cpp中, 由于你的头文件多处包含了,所以函数会报这个错了.

热点排行