一件跟const有关的巨诡异的事情,无法理解
在某个头文件中定义了一个外部变量:
double eps = 1e-10;
编译的时候没问题,但是运行的时候报错,说
one or more multiply defined symbols found
可是我把它改成
const double eps = 1e-10;
就没问题了。
这个是什么原因?太诡异了吧!我用的是VS2008
[解决办法]
不要在头文件里定义一个会更改的变量,会导致所有包含此头文件的模块里都有同一个变量。
const自带static属性,各模块彼此隔离,所以可以正常通过编译。
[解决办法]
时刻要注意区分内部连接和外部连接
以下情况有内部连接:
a)所有的声明
b)名字空间(包括全局名字空间)中的静态自由函数、静态友元函数、静态变量的定义
c)enum定义
d)inline函数定义(包括自由函数和非自由函数)
e)类的定义
f)名字空间中const常量定义
g)union的定义
外部连接:在一个多文件程序中,假如一个名称在连接时可以和其它编译单元交互,那么这个名称就有外部连接。
以下情况有外部连接:
a)类非inline函数总有外部连接。包括类成员函数和类静态成员函数
b)类静态成员变量总有外部连接。
c)名字空间(包括全局名字空间)中非静态自由函数、非静态友元函数及非静态变量
下面举例说明:
a)声明、enum定义、union定义有内部连接