2013-05-02 49 views
6

我想在兩個cpp文件(A.cpp和B.cpp)之間共享(全局化)一些矢量變量(V1和V2)。 我已經通過以下命令在A.h中定義了V1和V2。多個C++文件中的共享矢量變量

extern vector<uint64_t> V1; 
extern vector<uint64_t> V2; 

我還在A.cpp和B.CPP文件中添加了#include「A.h」。任何人都可以讓我知道我還應該做些什麼才能在這兩個CPP文件中訪問V1和V2的元素?

在此先感謝

回答

7

首先,您需要找到應該定義向量的位置。假設您選擇A.cpp

A.cpp(只在一個文件 - 限定在多個文件中相同的對象會產生的多個定義的符號錯誤)限定矢量作爲全局變量:

vector<uint64_t> V1; 
vector<uint64_t> V2; 

B.cpp(以及所有其它文件從該你想訪問V1V2宣佈載體爲extern。這會告訴鏈接器爲實際的對象的其他地方進行搜索:

extern vector<uint64_t> V1; 
extern vector<uint64_t> V2; 

現在,在鏈接步驟V1和從B.cppV2將被連接到從A.cppV1V2(或徘徊無論這些對象是定義) 。

+2

更好的是,將聲明放在* all *編譯單元中包含的標題中,其中包含包含定義的標題。這樣編譯器可以檢查定義和聲明是否匹配。 – 2013-05-02 23:52:34

2

extern意味着這隻有DECLARES變量,它不會定義它們。您需要在某些源文件(而不是頭文件)中的某處定義這些變量。 「DEFINITION」看起來與「DECLARATION」完全相同,但沒有使用extern

2

您已在頭文件中創建了一個聲明;現在您需要在單個編譯單元(.cpp文件)中創建定義。

所以選擇一個.cpp文件,並將定義放在那裏。在這種情況下,定義與聲明相同,除非沒有extern關鍵字。

vector<uint64_t> V1; 
vector<uint64_t> V2;