脚本宝典收集整理的这篇文章主要介绍了multiple definition of的问题,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
今天写代码遇到一个重定义的问题,我的代码目录如下
├── Store_node
│ ├── @R_107_1512@Lists.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.cpp
和status.cpp
中同时include "encode.h"
就会报函数DecodeCharArray2Int
重定义的错误。
第一个函数没有报错是因为我加了inline
,把他变成了内联函数,另一种解决方式是在头文件里面只保留函数声明,而将函数定义也就是函数体放到源文件encode.cpp
中。
上面能解决问题的原因如下: 首先,include 一个文件其实就相当于把代码复制过去。所以如果不是内联的,就相当于同名函数有两处定义,所以自然就重定义了 如果是内联的,那么在函数调用的地方,他会将函数展开为多行代码,所以事实上此时是没有函数的,所以不会出现重定义的问题 最后,将函数定义放到cpp文件中,头文件中只存放函数声明,那么当include的时候,其实就是将函数声明粘贴过去了,所以还是只有一处定义,他就在原来的cpp文件中
以上是脚本宝典为你收集整理的multiple definition of的问题全部内容,希望文章能够帮你解决multiple definition of的问题所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。