您的位置:首页 > 其它

一个关于编译和inline的问题

2011-12-09 18:09 120 查看
如下:

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(){};

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

解决办法虽然找到了,但里面的原因俺还不清楚,我下来研究,弄透了再把此文档进行更新。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: