Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

一个关于编译和inline的问题

来源: suchto 分享至:

如下:

Test.h 文件内容

class InlineRedefineClass {
public:
InlineRedefineClass():m_data(0){}

void Test();

        void SetValue(int value);

private :
int m_data;
};

void Test(){};
//////////////////////////////////////////////////////////////////////////////////////////////////////


Test1.cpp 文件内容:

#include "Test.h"

void InlineRedefineClass::SetValue(int value)
{
Test();
m_data = value;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////

Test2.cpp 文件内容:

#include "Test.h"

。。。。。。。。。。。。。。(Test2.cpp随便怎么写,只要包含Test.h头文件)


编译Test1.cpp和Test2.cpp文件,会说InlineRedefineClass::Test(void)  multiply defined

不知道是什么原因(应该是编译时对符号解析以及重定位的问题)


但如下方法可以解决这类问题:

1. 将函数Test()放在一个实现文件(.cpp)里进行定义;

2. 若想在头文件里定义的话,给函数Test()前加上 lnline,如下:

    inline void Test(){};


////////////////////////////////////////////////////////////////////////////////////////////////////////

解决办法虽然找到了,但里面的原因俺还不清楚,我下来研究,弄透了再把此文档进行更新。










Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史