C++ 错误LNK2001:未解析的外部符号;int const*const A“u数组”;当我不';t在定义文件中不包括标题

C++ 错误LNK2001:未解析的外部符号;int const*const A“u数组”;当我不';t在定义文件中不包括标题,c++,extern,C++,Extern,编译程序:MS VS 2010 在下面的程序中,我将一个_数组声明为extern(告诉编译器它将在某处定义),并在A.cpp中定义它 然而,我得到一个链接器错误。即使A.cpp编译得很好,这意味着_数组应该已经分配了内存并存在。是什么导致了这个问题 注意:我已经搜索了链接器错误代码,但仍然找不到导致此错误的确切原因 A.h ---------------------- #ifndef INC_A_H #define INC_A_H extern const int A_array[]; #end

编译程序:MS VS 2010

在下面的程序中,我将一个_数组声明为extern(告诉编译器它将在某处定义),并在A.cpp中定义它

然而,我得到一个链接器错误。即使A.cpp编译得很好,这意味着_数组应该已经分配了内存并存在。是什么导致了这个问题

注意:我已经搜索了链接器错误代码,但仍然找不到导致此错误的确切原因

A.h
----------------------
#ifndef INC_A_H
#define INC_A_H
extern const int A_array[];
#endif
----------------------

A.cpp
----------------------
const int A_array[] = {10, 20, 30};
----------------------

B.cpp
----------------------
#include <iostream>
#include "A.h"

int main()
{
    for(int i=0; i<3; i++)
    {
        std::cout << A_array[i] <<"\n";
    }
    int x;
    std::cin >> x;
    return 0;
}
----------------------
更新-1:


当我在A.cpp中包含A.h时,代码可以编译、链接并正常工作。有人能解释一下为什么A.cpp中需要包含这一点吗

问题在于头文件中有一个(稍微不正确的)转发声明

const int A_数组[]={10,20,30}的类型是一个数组或长度为3的数组

const int A_array[]
的类型是
int
指针或未定义长度的数组(它还不能知道数组的长度)

由于这些定义不完全匹配,编译器将不知道它们是相同的,除非在
A.cpp
中包含
A.h
,因为这样定义和声明都将在同一个文件中,编译器将链接它们


A.h
extern const int A_数组[3]
中进行声明应该是可行的。虽然在
A.cpp
中包含
A.h
会更正确。

你在
A.cpp
中包含
A.h
吗?@IvayloStrandjev有关系吗?@LuchianGrigore没有,现在我看不到整个问题。这对我来说是相当模糊的行为。非常感谢您的回答!
1>ClCompile:
1>  B.cpp
1>  A.cpp
1>  Generating Code...
1>B.obj : error LNK2001: unresolved external symbol "int const * const A_array" (?A_array@@3QBHB)
1>Visual Studio 2010\Projects\test_extern\Debug\test_extern.exe : fatal error LNK1120: 1 unresolved externals