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

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