今天写代码遇到一个重定义的问题,我的代码目录如下
├── 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>>=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.cpp
和status.cpp
中同时include "encode.h"
就会报函数DecodeCharArray2Int
重定义的错误。
第一个函数没有报错是因为我加了inline
,把他变成了内联函数,另一种解决方式是在头文件里面只保留函数声明,而将函数定义也就是函数体放到源文件encode.cpp
中。
所以这是什么原因啊?