C++ 错误C2065:在其他头文件中使用变量时未声明标识符

C++ 错误C2065:在其他头文件中使用变量时未声明标识符,c++,C++,第一个头文件 //status.h file static int A[2] = {1,2}; //anotherfile.h file #include "status.h" int GETID() { return A[1]; } 和另一个头文件 //status.h file static int A[2] = {1,2}; //anotherfile.h file #include "status.h" int GETID() { retur

第一个头文件

   //status.h file
    static int A[2] = {1,2};
//anotherfile.h file
#include "status.h"

int GETID()
{
  return A[1];
}
和另一个头文件

   //status.h file
    static int A[2] = {1,2};
//anotherfile.h file
#include "status.h"

int GETID()
{
  return A[1];
}
当我编译说一个是未声明的标识符时,我不断得到错误。我试图将A定义为extern const int,但仍然没有帮助。在我的IDE(VS2010)中,当我将鼠标悬停在GETID()下的值上时,实际上可以看到的内容

我想使用A作为全局数组,因为在我的实际程序中,A是一个包含250个元素的数组,我不想在程序中声明多个位置。在这种情况下,如何在另一个头文件中使用数组A


编辑:A不属于GETID()是类函数的任何类。

命名空间范围的
静态
不是全局变量-它是具有内部链接的变量-将为包含标头的每个翻译单元创建一个副本。您必须将其声明为
extern
,并在标题中使用include-guard:

//status.h file
#ifndef STATUS_H
#define STATUS_H
extern int A[2];
#endif

//status.cpp
#include "status.h"
int A[2] = {1,2}
无论您想在哪里使用
A
,现在只需
#包括“status.h”


注意,
inta[2]={1,2,3}
是非法的,因为您说
A
只有2个值,但您给它3个值。

命名空间范围的
静态
不是全局变量-它是一个具有内部链接的变量-将为包含标题的每个翻译单元创建一个副本。您必须将其声明为
extern
,并在标题中使用include-guard:

//status.h file
#ifndef STATUS_H
#define STATUS_H
extern int A[2];
#endif

//status.cpp
#include "status.h"
int A[2] = {1,2}
无论您想在哪里使用
A
,现在只需
#包括“status.h”


注意,
inta[2]={1,2,3}
是非法的,因为您说
A
只有2个值,但您给它3个值。

您的设置有多个问题

首先,如果事情真的像你说的那样,你就不会从你的代码中得到这个错误。您发布代码的方式是完全可编译的,不存在“未声明的标识符”问题。实际出现此错误的原因是头文件的循环包含。直接或间接地,您成功地将
status.h
包含到
anotherfile.h
中,同时将
anotherfile.h
包含到
status.h
中。循环标题包含永远不起作用。即使您解决了全局数组的主要问题,您仍然必须摆脱循环头包含,因为它稍后将以其他方式返回头部


其次,如果您需要一个真正的全局数组,即整个程序可以访问的一个数组,那么您必须使用外部链接来声明它,而不是将其声明为
静态
<代码>静态声明将生成无数完全独立的数组,每个翻译单元一个。

您的设置存在多个问题

首先,如果事情真的像你说的那样,你就不会从你的代码中得到这个错误。您发布代码的方式是完全可编译的,不存在“未声明的标识符”问题。实际出现此错误的原因是头文件的循环包含。直接或间接地,您成功地将
status.h
包含到
anotherfile.h
中,同时将
anotherfile.h
包含到
status.h
中。循环标题包含永远不起作用。即使您解决了全局数组的主要问题,您仍然必须摆脱循环头包含,因为它稍后将以其他方式返回头部


其次,如果您需要一个真正的全局数组,即整个程序可以访问的一个数组,那么您必须使用外部链接来声明它,而不是将其声明为
静态
<代码>静态声明将生成无数完全独立的数组,每个翻译单元一个。

噢,很抱歉数组声明错误。然而,我听从了你的建议,它仍然有错误。我想指出的是,我在另一个头文件中使用了A数组,而不是在status.cpp文件中使用。@Fylix您提到过这一点,这应该可以工作。如果没有,那么你发布的代码就不是真的。谢谢。我想我只是为了提问而简单地把它写下来。我想是时候深入研究我的代码了:)哦,对不起,数组声明错误。然而,我听从了你的建议,它仍然有错误。我想指出的是,我在另一个头文件中使用了A数组,而不是在status.cpp文件中使用。@Fylix您提到过这一点,这应该可以工作。如果没有,那么你发布的代码就不是真的。谢谢。我想我只是为了提问而简单地把它写下来。我想是时候深入研究我的代码了:)