关于在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中。
初学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中。