2012-04-08 108 views
0

我是Boost庫的bimap功能的新手,我很難將bimap傳遞到另一個函數中。我的bimap看起來是這樣的:在函數之間傳遞boost :: bimap

typedef boost::bimap< int, int > bimap_type; 
bimap_type bm; 

我有一個ADD_VALUES()函數,增加了一組值到bimap的:

add_values(int a, int b) 
{ 
bm.insert(bimap_type::value_type(a, b)); 
} 

我再有一個,就是設置的值的函數介紹bimap由一個單獨的類讓他們:

void set_values() 
{ 
MyClass::instance()->get_values(bm); 
} 

而且,MyClass中,get_values()看起來是這樣的:

void get_values(bimap_type myBimap) 
{ 
myBimap.add_values(3, 5); 
} 

但是,MyClass無法識別'bimap_type'。我嘗試把類型定義在一個單獨的頭文件,包括在MyClass的,但我得到的錯誤信息:

'class bimap_type' has no member named 'add_values' 

我怎樣才能順利通過bimap的這個Singleton類,以便從值來填充它類?有人知道嗎?

非常感謝。

回答

0

呃,boost::bimap本身沒有add_values方法,並且很難從這些代碼片段中知道爲什麼你突然想要出現一個。

+0

對不起,我應該已經更清楚了 - add_values()是我自己的函數。爲了爭論,它可以用通常的insert()函數替換。我的問題仍然存在,但是 - 你知道我是如何將bimap傳遞給Singleton類中的函數的嗎? – user1295558 2012-04-08 21:03:52

+0

謝謝timday和尤金 - 我現在已經把它分類,使用你們給出的建議。我現在通過引用傳遞bimap,並且我放棄了我的add_values()函數,因爲它只不過是boost :: bimap的insert()函數。歡呼你的幫助。 – user1295558 2012-04-08 21:27:41

0

考慮重命名你的函數:函數set_values()調用get_values()調用ADD_VALUES()是一個令人困惑的調用鏈...

當你需要修改一個對象在一個函數,你必須抓住它通過引用(或指針)。這個想法是,你必須在函數內部和外部使用同一個對象。如果按值傳遞,函數將會看到一個副本,所以它所做的任何操作都不會反映原始對象。

// formerly known as add_values() 
void initialize(bimap_type& bm, int a, int b) 
{ 
    bm.insert(bimap_type::value_type(a, b)); 
} 

這是你會怎麼稱呼它:

initialize(myBitmap, 3, 5); 

請務必及時更新您的整個調用鏈通過引用在適當情況下,因爲目前你get_values()的副本也工作通過。

+0

非常感謝,我會試試這個,並且重新命名我的功能。 – user1295558 2012-04-08 21:05:14

+0

感謝timday和尤金 - 我現在已經把它分類,使用你們給出的建議。我現在通過引用傳遞bimap,並且我放棄了我的add_values()函數,因爲它只不過是boost :: bimap的insert()函數。歡呼你的幫助。 – user1295558 2012-04-08 21:27:32