C++ 从另一个源文件C++;?

C++ 从另一个源文件C++;?,c++,header-files,C++,Header Files,我想逃课,所以记住这一点 我想知道如何从另一个.cpp文件访问变量 无论出于何种原因,当我试图在我的'codeReferences.h'头文件中包含该变量时,我都会收到LNK 2005错误。因此,我想知道如果不在全局使用的头文件中定义它(导致错误),如何从另一个.cpp文件访问变量 感谢您的所有回答。现在首先要注意的是,不要多次定义事物 第二,你至少应该阅读一本关于C++编程语言基础的教程。 我知道我可能听起来很苛刻,但一个简单的教程可以帮助你更好地理解这门语言 为了能够从不同的源文件访问变量,

我想逃课,所以记住这一点

我想知道如何从另一个.cpp文件访问变量

无论出于何种原因,当我试图在我的'codeReferences.h'头文件中包含该变量时,我都会收到LNK 2005错误。因此,我想知道如果不在全局使用的头文件中定义它(导致错误),如何从另一个.cpp文件访问变量


感谢您的所有回答。

现在首先要注意的是,不要多次定义事物

第二,你至少应该阅读一本关于C++编程语言基础的教程。 我知道我可能听起来很苛刻,但一个简单的教程可以帮助你更好地理解这门语言


为了能够从不同的源文件访问变量,可以使用扩展名包含它们。为了获得更好的实践,大多数开发人员使用标题来定义代码,并使用源代码来实际使其运行,以便能够轻松地调试和更改内容,而无需处理大量文件。

LNK2005
表示,对于同一符号,您有多个定义

您需要理解声明和定义之间的区别:

  • 当您声明一个变量时,您只告诉编译器有一个名称(=符号)和该符号的类型
  • 当您为一个变量指定一个具体的值或为它提供一个实现时,您就可以定义它(例如在函数的情况下)
一个符号可以有任意数量的声明,但只能有一个定义。也可以查看此线程:

如果要在多个.cpp文件(指同一对象)中使用相同的符号,则需要在头文件中使用
extern
关键字:

例如:

/** header.h **/
extern int i;
您可以在任意数量的.cpp文件中包含此标题,以引入符号
i
。必须仅在一个.cpp中指定
i
的定义:

/** code.cpp **/
#include "header.h"
int i; // this is a definition, even if you do not initialize here.
大概“.cpp文件”是指“翻译单位”

神圣的C++标准不关心代码是如何分布在文件中的,并且没有头文件的概念,而不.CPP .< /P> 在一个转换单元中定义并在另一个转换单元中访问的变量必须具有

extern
链接。这是命名空间级别的非const变量的默认值。但是,一个普通的声明也会定义变量,然后您会遇到这样的问题,即通常需要对每件事情进行一个定义

一个解决办法是写

extern int n_oranges;
在转换单元中,您只想访问变量。明确提及
extern
链接,而不使用初始值设定项,使其成为纯声明

您可以有任意多个纯粹的声明

最好将这样的声明放在头文件中,以避免冗余的多个可能不完全匹配的声明。请注意,在头文件中,它将作为每个相关翻译单元文本的一部分。C++编译器不在乎它来自哪里,只是它在那里。< /P>
相关标准e:

C++11§3.1/2: 声明是一种定义,除非声明函数时未指定函数体(8.4),否则 包含
extern
说明符(7.1.1)或链接规范(7.5),既不是初始值设定项也不是函数体,它在类定义(9.2,9.4)中声明静态数据成员,它是类名声明(9.1),它是不透明枚举声明(7.2),它是模板参数(14.1),它是参数声明(8.3.5)在一个 函数声明器,它不是函数定义的声明器,或者是
typedef
声明(7.1.3), 别名声明(7.1.3)、使用声明(7.3.3)、静态声明(第7条)、属性声明(第7条)、空声明(第7条)或使用指令(7.3.4)


您可以通过
#include
对另一个.cpp文件中的变量进行访问。或者,如果您计划在另一个.cpp文件中声明变量,您可以使用
extern
声明变量。好奇您为什么要避免类。
#在另一个.cpp文件中包含
。该文件不访问另一个单元的变量,它会生成新的变量(在过程中导致UB)你应该把你的答案添加到那里,而不是把它作为评论发布。我已经完全忘记了我会这么做