Error:全局变量不明白(using namespace std 与全局变量的冲突)
在用递归写八皇后时,定义了一个全局变量count,结果出现故障例如以下:提示全局变量不明白。
最后发如今实现文件.cpp中。我使用了using namespace std;
解决方法:
1.使用count 的地方改成 ::count 替代(由于std命名空间下也有 std::count ,编译器不确定此处是::count 还是std::count,所以会不明白)
2.凝视掉这个命名空间
3.或者改用 :
using std::cout;
using std::endl;
using std::cin;
思考总结:
一、using namespace std 思考
非常多时候使用这句代码不是一个好的办法(更重要的是:最好不要在头文件里使用)
好的习惯是使用std::cout以及std::cin
C++标准程序库中的全部标识符都被定义于一个名为std的namespace中, using namespace std 是将全部的系统定义的标识符导入,由于标准库非常的庞大,所程序猿在选择的类的名称或函数名时就非常有可能和标准库中的某个名字同样,也就是说你自定义的东西(变量,方法。类等)不能和系统中的这些标识符重名,否则将出现命名冲突的错误。
二、c++ 有关全局变量的声名定义
1.一般最好把全局变量声明在cpp文件里(假设在.h文件里定义的话,多层包括可能会引起反复定义的错误)
2.cpp中定义好了之后,能够在.h文件里利用 externkeyword进行 声明(extern 声明表示在此处引入外部定义变量的声明,而不是在本编译单元中再声明一个同名的局部变量)
然后其它文件要使用这些变量的时候,仅仅要#include 这个头文件就能够了。并且不会引起反复定义的错误
三、静态全局变量、全局常量(const)、普通全局变量比較:
1.静态全局变量:即使用static修饰的全局变量。他不能使用extern进行引入声明。即extern与static不能够一起使用;并且static全局变量与普通全局变量有非常大不同。
static修饰的全局变量的作用域仅仅是其本身所在的编译单元(在本编译单元内更改生效),在其它单元中使用时。该变量会有新的内存地址。也就是说,每个使用它的编译单元都给它开辟了单独的空间,并把它的初始值复制过来。这样假设某个单元中对它进行了改动,那么多个编译单元中它的值就可能不一样了
注意:
static修饰的全局变量声明与定义是一体的,在头文件里声明了static全局变量,同一时候也是定义了它,不像普通的全局变量是分开的。
多个编译单元都包括static全局变量所在的头文件。不会引起重定义错误。由于每一个编译单元都开辟了新的空间存储它;
2.const全局变量:const全局变量使用起来与普通全局变量一样。在.cpp中定义并赋初值,在.h头文件里用extern进行声明,然后再须要使用的地方包括.h就可以,在多个编译单元中其内存地址也不同(这一点与static全局变量类似)。可是因为是常量,不能改动其值。所以即使内存地址不一样也没影响,值都一样。
还没用到。參考:http://blog.csdn.net/jiadebin890724/article/details/40509333
四、命名空间的使用
未完待续.....
Error:全局变量不明白(using namespace std 与全局变量的冲突)的更多相关文章
- C++ 全局变量不明确与 using namespace std 冲突
写了个汉诺塔,使用全局变量count来记录步数,结果Error:count不明确 #include <iostream> using namespace std; ; void hanoi ...
- #include<iostream.h>与#include<iostream> using namespace std的区别
所谓namespace,是指标识符的各种可见范围.C++标准程序库中的所有标识符都被定义于一个名为std的namespace中. 一 :<iostream>和<iostream.h ...
- 关于C++中using namespace std
原文链接:http://www.kuqin.com/language/20080107/3532.html <iostream>和<iostream.h>是不一样,前者没有后缀 ...
- (C++)浅谈using namespace std
1.<iostream>和<iostream.h> 在你的编译器include文件夹里面可以看到,二者是两个文件,里面的代码是不一样的. 后缀为.h的头文件c++标准已经明确提 ...
- using namespace std 是什么意思?
摘录CSDN上面大牛的回答简要意思就是使用标准库,想知道更清楚的继续读下面的. using namespace std 意思: using 和namespace都是C++的关键词. ...
- 【转】关于“using namespace std”
对于一个存在着标准输入输出的C++控制台程序,一般会在#include <iostream>的下一行发现一句话,using namespace std.这句话其实就表示了所有的标准库函数都 ...
- 【学习笔记】using namespace std 的作用
C++编程时几乎每次都敲上using namespace std;但这行代码究竟有什么作用呢? C++标准程序库中的所有标识符都被定义于一个名为std的namespace中. 早些的编码将标准库功能定 ...
- [转载]C++之using namespace std 详解与命名空间的使用
来源:https://blog.csdn.net/Bruce_0712/article/details/72824668 所谓namespace,是指标识符的各种可见范围.C++标准程序库中的所有标识 ...
- using namespace std 和 using std::cin
相较using std::cin使用using namespace std不会使得程序的效率变低,或者稳定性降低,只是这样作会将很多的名字引入程序,使得程序员使用的名字集合变小,容易引起命名冲突. 在 ...
随机推荐
- Jenkins系列之Jenkins的安装(一)
自动化测试的时候通常我们都会进行持续集成,下面是持续集成工具Jenkins的安装 Jenkins优点: 开源免费 跨平台,支持所有的平台 web形式的可视化的管理页面 安装配置超级简单 tips及时快 ...
- DeepCloneObjects 和 DeepClone
ARX AcDbDatabase 中的方法 deepCloneObjects() 和 wblock() 区别以及和 AcDbObject 方法 clone() 和 deepClone() 的关系 Ac ...
- EasyUI_datagrid
案例一丶jquery.easyui.min.js:10631 Uncaught TypeError: this.renderEmptyRow is not a function 解决方法:datagr ...
- A3. JVM 类加载器
[概述] 虚拟机设计团队把类加载阶段中的 “通过一个类的全限定名来获取描述此类的二进制字节流” 这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码 ...
- clock_gettime 用法
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/sta ...
- 「 RQNOJ PID204 」 特种部队
解题思路 看了一下题解,感觉题解貌似有些错误.所以把我的见解放在这里,希望路过的大佬可以帮忙解释一下 QAQ 就是这里的更新 $dp[i-1][i]$ 和 $dp[i][i-1]$ 的时候,之前博主说 ...
- NOIP2016 DAY1 T2天天爱跑步
传送门 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 ...
- ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer
传送门:https://nanti.jisuanke.com/t/31462 本题是一个树上的问题:结点间路径问题. 给定一个有N×M个结点的网格,并给出结点间建立墙(即拆除边)的代价.花费最小的代价 ...
- RequestMapping_PathVariable注解
[@PathVariable 映射URL绑定的占位符] 1.带占位符的URL是Spring 3.0 新增的功能,该功能在Spring MVC向 REST 目标挺进发展过程中具有里程碑的意义. 2.通过 ...
- cocos2dx 用命令行进行编译的指令
cocos compile -p android -m release -s F:\cocosproj\antest --ap android-20 上面那条就是我常用的指令,这指令修改一下就成了你的 ...