2012-04-08 85 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