今天写代码遇到一个重定义的问题,我的代码目录如下
├── 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
中。
所以这是什么原因啊?