0

Boostライブラリのbimap機能を初めて使用し、bimapを別の関数に渡すのに問題があります。私のバイマップは次のようになります。

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

バイマップに値のセットを追加するadd_values()関数があります。

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

次に、シングルトンクラスからバイマップの値を取得することでバイマップの値を設定する関数があります。

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」を認識しません。typedefを別のヘッダーファイルに入れてMyClassにインクルードしようとしましたが、エラーメッセージが表示されます。

'class bimap_type' has no member named 'add_values'

クラスからの値で埋めるために、このシングルトンクラスにバイマップを正常に渡すにはどうすればよいですか?誰か知っている?

どうもありがとう。

4

2 に答える 2

0

えーと、boost :: bimap自体にはadd_valuesメソッドがなく、これらのコードフラグメントから、突然メソッドが表示されることを期待している理由を判断するのは困難です。

于 2012-04-08T19:24:37.227 に答える
0

関数の名前を変更することを検討してください。add_values()を呼び出すget_values()を呼び出すset_values()は、紛らわしい呼び出しチェーンの1つです。

関数内のオブジェクトを変更する必要がある場合は、参照(またはポインター)によってオブジェクトを取得する必要があります。関数の内外で同じオブジェクトを操作する必要があるという考え方です。値を渡すと、関数はコピーを見るので、それを使って行うことは元のオブジェクトに反映されません。

// 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()はコピーでも機能するため、必要に応じて、呼び出しチェーン全体を更新して参照を渡すようにしてください。

于 2012-04-08T19:27:56.887 に答える