关于在namesapce中定义变量的困惑

关于在namesapce中定义变量的疑惑
初学C++,namespace时出现以下问题

在NameSpaceDefine.h中自定义两个namespace,如下:

NameSpaceDefine.h:
#ifndef NAMESPACEDEFINE_H
#define NAMESPACEDEFINE_H

namespace one
{
const int M = 200;
int inf;
}

namespace two
{
int x;
int inf = -100;
}

#endif


当有多个cpp文件包含该头文件是出现变量重复定义的错误:
如:
TestFun.cpp和TestFun2.cpp都包含如下代码:


#include "NameSpaceDefine.h"

错误如下:
1>  NameSpaceTest.cpp
1>TestFun.obj : error LNK2005: "int one::inf" (?inf@one@@3HA) 已经在 FunTest2.obj 中定义
1>TestFun.obj : error LNK2005: "int two::x" (?x@two@@3HA) 已经在 FunTest2.obj 中定义
1>TestFun.obj : error LNK2005: "int two::inf" (?inf@two@@3HA) 已经在 FunTest2.obj 中定义
1>D:\CppWorkSpace\CppLearn\Debug\CppLearn.exe : fatal error LNK1169: 找到一个或多个多重定义的符号


求前辈指导,C++新手,分数不多,见谅


------解决方案--------------------
#ifndef
#define
#endif
只在一个cpp文件中起作用,也就是你不能保证对个cpp中头文件只被包含一次,所以,非const变量被定义了多次。
原则:
如果能被常量表达式初始化的const变量可以放在头文件中,非const变量定义应该放在cpp中。