为什么变量需要在头文件中的声明处进行替换,然后在相应的cpp文件中再次声明为:

一种。防止链接错误

    ex. header 1.h-
    namespace forglobal {
    extern int x;
    }

     source 1.cpp-
    namespace forglobal{
    int x=6;
    }

    source 2.cpp-
    #include "1.h"
    cout<<x; //6

b。在不同的cpp文件中使用时,不能像调用函数ex那样仅使用 namespace 。
    header -1.h
    namespace forglobal {
    int x
    }

    source -1.cpp {
    namespace forglobal {
    void change() {
    x=5;
    }
    }
    }

    source -2.cpp
    #include "1.h"
    forglobal::change();
    cout<<forglobal::x<<'\n'; //5

最佳答案

没有声明extern的任何命名空间级别的变量声明也是一个定义。也就是说,如果您的 header 带有一个非extern变量声明(包含在一个以上链接到程序中的翻译单元中),则会得到多个定义。为防止这种情况,请将 header 中的变量声明标记为extern,并忽略定义所在的extern

当然,首先使用全局变量通常不是一个好主意,但这是一个不同的讨论。

08-16 21:55