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