首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一件和const有关的巨诡异的事情,无法理解

2013-12-15 
一件跟const有关的巨诡异的事情,无法理解在某个头文件中定义了一个外部变量:double eps 1e-10编译的时

一件跟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定义有内部连接 

热点排行