2011-12-26 46 views
0

我需要在共享内存中存储Quadtree的结构。使用boost :: interprocess offset_ptr

它是一个点的用4个指针树节点区域的一类和向量:

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

我与

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

并作为尝试使用:

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,...); 

这工作正常,直到我尝试static_cast node0:

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

我得到:

错误C2440: '的static_cast':无法从 '升压::进程间:: offset_ptr' 转换为 'CSNode4 *'

(2010 MSVC,提高1.42)

我在做什么错,我该如何解决?

回答

1

我假设CSNode4相当于CNode4。由于node0是一个offset_ptr,当然你不能static_cast它到CSNode4的指针。你应该直接使用offset_ptr的拷贝构造函数:

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

谢谢, 但仍然没有工作,现在我得到: 访问冲突读取位置0x0075 ... 我已经使用get()成员也试过: offset_ptr node0_pt; node0_pt = rootNode-> node0; (node0_pt.get()) - > ...也没有工作... 其他: CNode4代替CSNode4是语法,改变了 ,分配器仅用于向量成员,不应该影响呢? – Mike

相关问题