gpt4 book ai didi

c++ - c++中extern的使用

转载 作者:IT老高 更新时间:2023-10-28 22:16:02 26 4
gpt4 key购买 nike

我很难理解“外部”的工作原理。我搜索了谷歌,但似乎没有我正在尝试的特定示例

如果我有一个引用 one.h 的文件 main.cpp在其中我有一个名为 LIST1 的列表(这是一个 100 x 100 的双数组)所以我有双 List1[100][100];

请问如何在 one.cpp 中使用此列表?

extern double LIST1[100][100]

不工作:/

main.cpp:

#include "one.h"

extern double LIST1[100][100];

一个.cpp:

void one::useList()
{
for(j = 0; j < 100; j++)
{
for(i = 0; i < 100; i++)
{
LIST1[j,i] = 0.5;
}
}
}

这就是我所拥有的。

我得到的错误:

1>main.obj : error LNK2001: unresolved external symbol "double (* LIST1)[100]" (?LIST1@@3PAY0GE@NA)

最佳答案

命名空间范围内的变量声明始终是一个定义除非你把extern放在它上面;那么它只是一个声明。

C++ 中的一条重要规则是,您不能有多个同名对象的定义。如果您的头文件只包含 double LIST1[100][100];,只要您只将它包含在一个翻译单元中,这将起作用。但是,只要将头文件包含在多个翻译单元中,就会有 LIST1 的多个定义。你违反了规则!

因此,要让一个全局变量可从多个翻译单元访问,您需要确保头文件中只有一个声明。我们使用 extern 来做到这一点:

extern double LIST1[100][100];

但是,您不能只包含 header 并尝试使用此对象,因为还没有定义。这个 LIST1 声明只是说这种类型的数组存在于某处,但我们实际上需要定义它来创建对象。因此,在单个翻译单元(通常是您的 .cpp 文件之一)中,您需要输入:

double LIST1[100][100];

现在,您的每个 .cpp 文件都可以包含头文件并且只能获得声明。在你的程序中有多个声明是非常好的。只有 一个 .cpp 文件会有这个定义。

关于c++ - c++中extern的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15841495/

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