读书人

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

发布时间: 2012-09-24 13:49:42 作者: rapoo

没有重复定义了,怎么还报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中, 由于你的头文件多处包含了,所以函数会报这个错了.

读书人网 >C++

热点推荐