multiple definition of的问题

发布时间:2022-07-04 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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&amp;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中。

上面能解决问题的原因如下: 首先,include 一个文件其实就相当于把代码复制过去。所以如果不是内联的,就相当于同名函数有两处定义,所以自然就重定义了 如果是内联的,那么在函数调用的地方,他会将函数展开为多行代码,所以事实上此时是没有函数的,所以不会出现重定义的问题 最后,将函数定义放到cpp文件中,头文件中只存放函数声明,那么当include的时候,其实就是将函数声明粘贴过去了,所以还是只有一处定义,他就在原来的cpp文件中

脚本宝典总结

以上是脚本宝典为你收集整理的multiple definition of的问题全部内容,希望文章能够帮你解决multiple definition of的问题所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。