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


四、命名空间的使用

未完待续.....


原文地址:https://www.cnblogs.com/blfbuaa/p/7123467.html