gpt4 book ai didi

c++ - 外部和链接器错误

转载 作者:行者123 更新时间:2023-11-30 04:15:32 24 4
gpt4 key购买 nike

为什么变量需要在头文件中声明extern,然后在相应的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

在不同的 cpp 文件中使用,我不能像调用函数 ex 一样只使用命名空间。

    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 的 namespace 级变量声明也是一个定义。也就是说,如果您的 header 包含一个非extern 变量声明,该声明包含在多个链接到程序中的翻译单元中,您将获得多个定义。为防止出现这种情况,您将 header 中的变量声明标记为 extern 并省略定义所在的 extern

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

关于c++ - 外部和链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18244221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com