我想在兩個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的元素?
在此先感謝
我想在兩個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的元素?
在此先感謝
首先,您需要找到應該定義向量的位置。假設您選擇A.cpp
。
在A.cpp
(只在一個文件 - 限定在多個文件中相同的對象會產生的多個定義的符號錯誤)限定矢量作爲全局變量:
vector<uint64_t> V1;
vector<uint64_t> V2;
在B.cpp
(以及所有其它文件從該你想訪問V1
和V2
)宣佈載體爲extern
。這會告訴鏈接器爲實際的對象的其他地方進行搜索:
extern vector<uint64_t> V1;
extern vector<uint64_t> V2;
現在,在鏈接步驟V1
和從B.cpp
V2
將被連接到從A.cpp
的V1
和V2
(或徘徊無論這些對象是定義) 。
extern
意味着這隻有DECLARES變量,它不會定義它們。您需要在某些源文件(而不是頭文件)中的某處定義這些變量。 「DEFINITION」看起來與「DECLARATION」完全相同,但沒有使用extern
您已在頭文件中創建了一個聲明;現在您需要在單個編譯單元(.cpp文件)中創建定義。
所以選擇一個.cpp文件,並將定義放在那裏。在這種情況下,定義與聲明相同,除非沒有extern
關鍵字。
vector<uint64_t> V1;
vector<uint64_t> V2;
更好的是,將聲明放在* all *編譯單元中包含的標題中,其中包含包含定義的標題。這樣編譯器可以檢查定義和聲明是否匹配。 – 2013-05-02 23:52:34