2011-12-26 10 views
0

Quadtreeの構造を共有メモリに格納する必要があります。boost :: interprocess offset_ptrの使用

これは、ツリーノードの領域と点のベクトルの4つのポインタを持つクラスである:

typedef allocator<void, managed_shared_memory::segment_manager> void_allocator; 
const void_allocator alloc_void(segment.get_segment_manager()); 
CSNode4* rootNode = segment.construct<CSNode4> (_RootNode) (alloc_void); 
rootNode->node0 = new CSNode4(alloc_void,...); 

:Iとして

class CSNode4 
{ 
... 
offset_ptr<CSNode4> node0; 
offset_ptr<CSNode4> node1; 
... 
}; 

と使用して試みた

class CSNode4 
{ 
... 
CSNode4* node0; 
CSNode4* node1; 
CSNode4* node2; 
CSNode4* node3; 
vector<vec2> pointArray; 
}; 

これは、static_cast node0を試すまで問題なく動作します。

offset_ptr<CSNode4> N1 = static_cast<CSNode4*>(rootNode->node0); 

私が手:

エラーC2440: 'static_castを': '後押し::プロセス間を:: offset_ptr' から

'CSNode4 *' に変換することはできません

(MSVC 2010、1.42を高めます)

私は間違って何をしていますか、どうすれば修正できますか?

答えて

1

CSNode4はCNode4と同等であると仮定します。 node0はoffset_ptrなので、もちろんCSNode4のポインタにstatic_castすることはできません。

boost::interprocess::offset_ptr<CSNode4> N1(rootNode->node0); 
+0

おかげで、まだ動作していない 、今私が手:場所0x0075 ...私もGET()メンバを使用してみましたが を読ん アクセス違反を: offset_ptrあなたは直接offset_ptrのコピーコンストラクタを使用する必要があります node0_pt; node0_pt = rootNode-> node0; (node0_pt.get()) - > ...また動作していない... その他: CNode4の代わりCSNode4た構文は、 、アロケータは唯一のベクトルメンバーのために使用されていることを変更し、これに影響を与えるべきではないのですか? – Mike

関連する問題