2009-08-13 13 views
0

私が定義したカスタムNodeタイプのboost::mutable_queueの簡単なバージョンをインスタンス化しようとしています。私は、次のスニペットを使用してmutable_queue<double>インスタンスをインスタンス化に支障がない(STDとブースト名前空間を使用して、必要なすべてが含まれます):しかしブーストグラフライブラリを使用する:boost :: mutable_queueのproperty_map

int N = 100; 

mutable_queue<double> *q = 
    new mutable_queue<double>(N, less<double>(), identity_property_map()); 

、私は(そのために私はoperator<をオーバーロードしましたNodedoubleを切り替えるしようとすると、そしてoperator==)、私はもはやそれを働かせることができません。

error: no matching function for call to ‘boost::mutable_queue >, std::less, boost::identity_property_map>::push(Node*&)’ 
    mutable_queue.h:100: note: candidates are: void boost::mutable_queue::push(const IndexedType&) [with IndexedType = UnitTest::Node_test()::entry_t, RandomAccessContainer = std::vector >, Comp = std::less, ID = boost::identity_property_map]

私の疑惑は、私がproperty_mapの使い方を理解していないよということです。

typedef Node entry_t; 
typedef vector<entry_t> storage_t; 
typedef less<entry_t> comp_t; 
typedef identity_property_map prop_map_t; 
//typedef iterator_property_map<storage_t, 
// property_map<storage_t, entry_t>::type > prop_map_t; 
typedef mutable_queue<entry_t, storage_t, comp_t, prop_map_t> queue_t; 

queue_t *q = new queue_t(N, comp_t(), prop_map_t()); 

これは、これらの線に沿って私にエラーを与える:ここで私がしようとしているものの代表的な一例です。誰かがこのスニペットを修正するのを手伝ってもらえますか、なぜそれが正しいことなのか少し説明してください。

答えて

1

あなたはプッシュを呼び出しているところ私は表示されませんが、あなたはノードをプッシュしなければならないときには、*あなたがノードをプッシュしていることが表示されます:

::push(Node*&) 

それはノードのためのプッシュがあるとあなたに言っていますconstの&:

push(const IndexedType&) 

IndexedType =ノード

関連する問題