编译器:MS VS 2010
在下面的程序中,我将 A_array 声明为 extern(告诉编译器它将在某处定义)并在 A.cpp 中定义它。
但是我收到链接器错误。即使 A.cpp 编译得很好,这意味着 A_array 应该已经分配了内存并且存在。什么可能导致此问题?
注意:我已经在 SO 中搜索了链接器错误代码,但仍然找不到此错误的确切原因。
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>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
更新 - 1:
当我在 A.cpp 中包含 Ah 时,代码会编译、链接并正常工作。有人可以解释为什么在 A.cpp 中需要包含此内容吗?