没有重复定义了,如何还报LNK2005
没有重复定义了,怎么还报LNK2005?
我在一个disk.h文件中实现了一个通用函数,整个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中, 由于你的头文件多处包含了,所以函数会报这个错了.
我在一个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中, 由于你的头文件多处包含了,所以函数会报这个错了.