multiple definition of的问题

今天写代码遇到一个重定义的问题,我的代码目录如下

├── store_node
│   ├── CMakeLists.txt
│   ├── config
│   │   └── config.ini
│   ├── init
│   │   ├── statusdb.cpp
│   │   └── statusdb.h
│   ├── main.cpp
│   
│   
│   
└── utils
    ├── CMakeLists.txt
    ├── encode
    │   ├── encode.cpp
    │   └── encode.h

我的encode.h的内容如下:

#ifndef __ENCODE_H__
#define __ENCODE_H__
#include <cstdint>

namespace glib{
// void EncodeInt2CharArray(char* dst,uint32_t num);
inline void EncodeInt2CharArray(char* dst,uint32_t num){
    for(int i=0;i<4;++i){
        *(dst++)=0xFF&num;
        num>>=8;
    }
}
uint32_t DecodeCharArray2Int(char* src){
    uint32_t res=0;
    for(int i=0;i<4;++i){
        int step=8;
        res=res | (*(src+i)&0xFF)<<step*i;
    }

    return res;
}
}

#endif

然后在main.cppstatus.cpp中同时include "encode.h"就会报函数DecodeCharArray2Int重定义的错误。

第一个函数没有报错是因为我加了inline,把他变成了内联函数,另一种解决方式是在头文件里面只保留函数声明,而将函数定义也就是函数体放到源文件encode.cpp中。

所以这是什么原因啊?

上一篇:C++学习(一)


下一篇:Visual Studio Code (VSCode) 配置 C/C++ 开发编译环境