C++基础之全局变量

C++的水比較深,之前我一直以为C++的全局变量会像其它语言一样,很easy仅仅要在头文件里,定义一个变量就可以,比方以下的test.h:

#ifndef _TEST_H
#define _TEST_H

int a = 10;

#endif

我都加上头文件保护符,总应该没有多重包括的问题了吧?没想到多个cpp文件引用同个头文件还是狂报错:error LNK2005 a 已经在 xx.obj中定义。

又拿起《C++ Primer》看了下。发现正确的应该这么写:

test.h

#ifndef _TEST_H
#define _TEST_H

extern int a;

#endif

test.cpp

#include "test.h"

int a = 10;

原来:头文件用于声明而不是用于定义!定义仅仅能够出现一次。而声明则能够出现多次。

extern int a = 10;//初始化了值,是定义
double b;            //没有extern关键词,是定义

对于头文件不应该包括定义这一规则。有3个例外。

头文件能够定义类,值在编译时就已知道的const对象和inline函数。

C++基础之全局变量

时间: 2024-10-06 21:16:55

C++基础之全局变量的相关文章

AxureRP8实战手册(基础31-40)

AxureRP8实战手册(基础31-40) 本文目录 基础31.     切换元件库 第2章          页面设置 基础32.     设置页面居中 基础33.     设置页面背景(图片/颜色) 基础34.     设置页面颜色(草图/黑白) 第3章          设置条件 基础35.     添加条件判断 基础36.     设置条件限制 基础37.     用例条件转换 第4章          使用变量/公式 基础38.     全局变量设置 基础39.     局部变量设置

python基础知识(三)

摘要:主要涉及新数据类型set集合.三元运算.深浅拷贝.函数基础.全局变量与局部变量 一.set --> 无序,不允许重复的集合 不允许重复的列表,   1,创建    s = set() 接收一个可迭代参数      l = [11,22,11,22] s = set(l) --> print s --> {11,22}    s = {11,22,33}     创建空集合 默认使用 s = set()   2,方法    .add()  添加一个元素    .clear()    

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

php最全基础,数组,函数,超全局变量,时间,回话,文件,php操作mysql

共享一份学习php最全基础语法知识的笔记 原文链接:http://www.cnblogs.com/oscn/p/3607757.html:略有修改   http://www.cnblogs.com/ljab/p/6125995.html略有修改 1.判断php短标记<??>是否适用,查看php配置文件php.ini中的"short_open_tag = On"2.官方的标记<?php?>  , <script language="php"

零基础学python-16.5 模块间全局变量的修改以及其他访问全局变量的方法

这一章节我们来讨论一下python里面模块间全局变量的修改以及其他访问全局变量的方法 1.模块间全局变量的修改 x=1#全局变量,其实就是模块里面所有的函数都可以使用 def test(): print(x) if __name__=='__main__': test() 上面的代码保存为test.py import test if __name__=='__main__': test.x=2 test.test() print(test.x) 上面的代码保存为test2.py 我们运行test

python基础--局部变量与全局变量

首先来看两张图,局部变量与全局变量的区别: 局部变量: class MyClass(): def a(self): n=100 print('a中的n数值为:%d'%(n)) def b(self): n=n+200 print('b中的n数值为:%d'%(n)) 这个时候就会报错,函数b中的n=n+200会显示n未定义错误,原因是n只是在函数a中定义了一个值100,但是函数b中并未赋值,如果还是要使用n这个数值,就可以定义一个全局变量,表示区分我这里写成_n 全局变量: _n=1111 cla

php 基础之 php里的超级全局变量 --4.23

// php里的超级全局变量 $num =  99; function t() {    echo $num;} // 在这个调用过程 , $num为null,因为函数内部没有定义$num// 且在PHP中,并不会像js一样,尚着作用域往外寻找t(); // 在PHP中,有一类特殊的变量,叫做超级全局变量.// 不管你的在函数中,还是在类内部,也不管代码包装了多深.// 都能够访问到该变量. function s() {    echo $_GET['title'];} s();

JavaScript基础尽量少使用全局变量(001)

Pattern意思是模式,好的编码习惯经过多次实践的应用就会形成模式,而反模式(Anti-Pattern)则是不好的编码习惯.了解 JavaScript模式之前,先来看看Anti-pattern的例子.Javascript使用函数(function)来管理变量的作用域 (scope).定义在函数体内部的变量是局部变量,而其它定义在函数体外的变量是全局变量.全局变量在Javascript中通常是不应该使用的.如: myglobal = "hello"; // antipattern,因为

C 基础 全局变量

/** 被static修饰的局部变量 1.只有一份内存, 只会初始化一次 2.生命周期会持续到程序结束 3.static改变了局部变量的生命周期, 但是不能改变局部变量的作用域 被static修饰的全局变量 1.作用域仅限于当前文件(任何文件不能通过extern来引用这个全局变量) 2.static改变了全局变量的作用域, 但不是没有改变全局变量的生命周期 默认情况下的全局变量 1.作用域是整个程序的(整个程序的任何地方都可以通过extern来引用这个全局变量) 2.只有一份内存, 只会初始化一