如下:
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(){};
////////////////////////////////////////////////////////////////////////////////////////////////////////
解决办法虽然找到了,但里面的原因俺还不清楚,我下来研究,弄透了再把此文档进行更新。