2013-04-03 34 views
0

我有一個main.cpp和一些類,每個類都在兩個文件中定義:一個頭文件和一個.cpp文件。 在main.cpp我有一個2D矢量。我想在類的成員函數中使用這個向量。首先我試圖包含主文件,但是我收到了重定義錯誤。之後,我試圖在另一個.h文件中定義該矢量。但那也沒用。 那麼我該怎麼做才能在定義某些類時使用這個向量,這樣它就可以保存成員函數所做的更改。我怎麼可以同時使用多個.cpp和頭文件中的矢量?

不幸的是,向量是全球!

獲取更多信息這個向量是一個遊戲板。這個遊戲有一些物體:怪物,人類,寶藏和一些陷阱。 該主板是全球定義的主要功能之前。 main.cpp中有一些使用這個板子的函數,而我上面提到的3行的這些類別,在它們的成員函數中使用這個板子。

是使用解決方案「的extern」?(我不知道它是什麼,我只是看到了它的答案! - 如果它的解決方案,我應該搜索一下吧。)

+1

查找在你的C/C++參考文檔的'extern'關鍵字也就是說,使用參考參數和忘記了全局的想法,除非整個程序少於約25行代碼 – WhozCraig

+0

這是一個全局變量(壞主意)嗎?main()或其他函數中的局部變量?如果我們要幫助你,那種東西很重要。 –

+2

將其作爲參考傳遞給相關功能。 – Pubby

回答

0

Main.cpp的

#include <vector> 

std::vector<std::vector<int>> myArray; 

int main(int argc, char **argv) 
{ 
    // blah... 
    myArray.add(5); 
} 

,並在你的其他的文件:

#include <vector> 

extern std::vector<std::vector<int>> myArray; 

使用的extern關鍵字允許你告訴編譯器「嘿,這個對象就在這裏,它不存在...但是不用擔心! 「

您也可以使用」extern「關鍵字來加載序列化數據(如bmp2c,它使包含圖片二進制數據的.c文件)

編輯:。此外,這是非常重要的兩個對象具有完全相同的名稱(區分大小寫)

+0

通過使用extern我不再有任何錯誤,但對矢量所做的更改不保存在其上,換句話說它根本不會改變! –

+0

你的意思是當你關閉程序並重新打開它時?這很正常,不應該。如果你希望在改變它的時候保存你的矢量,你需要編寫某種解析器,並手動讀/寫文件來加載/保存矢量。 – SsJVasto

0

你可以把它寫像這樣的:

extern vector< vector<int> > vec2D; //declare the 2d vector here 

a.cpp

#include "a.h"  
vector< vector<int> > vec2D; //define the 2d vector here 

的main.cpp

#include "a.h" 
//use the 2d vector here 
+2

這將*工作*。但值得指出的是,這不是設計代碼的好方法。將遊戲板矢量放入表示遊戲的類中,然後將該類的實例的引用傳遞給需要與遊戲交互的任何函數(或者,甚至更好,定義編輯的函數)遊戲作爲遊戲類的類方法。) – drewmm

+0

哦,是的!你是對的。 – Snail

+0

@Snail \t 正如我所說的,我也想用這個向量來定義一些類。當我包含向量被定義的頭文件時,我得到一個錯誤:錯誤18錯誤LNK2005:「class std :: vector >,class std ::分配器> >> board「(?board @@ 3V?$ vector @ V?$ vector @ DV?$ allocator @ D @ std @@@ std @@ V?$ allocator @ V?$ vector @ DV?$ allocator @ D @ std @@@ std @@@ 2 @@ std @@ A)已在header.obj中定義E:\ lab和python編程\ C++高級編程\ main.obj我現在應該怎麼做?! –

相關問題