簡體   English   中英

錯誤LNK2001:未解析的外部符號“int const * const A_array”當我在定義文件中不包含標頭時

[英]error LNK2001: unresolved external symbol “int const * const A_array” when I don't include the header in the definition file

編譯: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中需要包含這個內容嗎?

問題是您在頭文件中有一個(略微不正確的)前向聲明。

const int A_array[] = {10, 20, 30};的類型const int A_array[] = {10, 20, 30}; 是數組或長度3。

const int A_array[]的類型是int指針或未定義長度的數組(它還不知道數組的長度)。

由於這些定義不完全匹配,編譯器不會知道它們是相同的,除非你在A.cpp包含Ah ,因為那時定義和聲明都將在同一個文件中,編譯器將鏈接它們。

Ah extern const int A_array[3]應該有效。 雖然在A.cpp包括Ah會更正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM