Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用boost::进程间偏移量_C++_Boost - Fatal编程技术网

C++ 使用boost::进程间偏移量

C++ 使用boost::进程间偏移量,c++,boost,C++,Boost,我需要在共享内存中存储四叉树的结构 它是一个具有4个指针的类,用于树节点区域和点向量: class CSNode4 { ... CSNode4* node0; CSNode4* node1; CSNode4* node2; CSNode4* node3; vector<vec2> pointArray; }; 类CSNode4 { ... CSNode4*node0; CSNode4*node1; CSNode4*node2; CSNode4*node3; 矢量点阵列; }; 我

我需要在共享内存中存储四叉树的结构

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

class CSNode4
{
...
CSNode4* node0;
CSNode4* node1;
CSNode4* node2;
CSNode4* node3;
vector<vec2> pointArray;
};
类CSNode4
{
...
CSNode4*node0;
CSNode4*node1;
CSNode4*node2;
CSNode4*node3;
矢量点阵列;
};
我试过了

class CSNode4
{
...
offset_ptr<CSNode4> node0;
offset_ptr<CSNode4> node1;
...
};
类CSNode4
{
...
偏移量_ptrnode0;
偏移ptr节点1;
...
};
并用作:

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,...);
typedef分配器void\u分配器;
const void_分配器alloc_void(segment.get_segment_manager());
CSNode4*rootNode=section.construct(_rootNode)(alloc_void);
rootNode->node0=新的CSNode4(alloc_void,…);
在我尝试静态_cast node0之前,这一切正常:

offset_ptr<CSNode4> N1 = static_cast<CSNode4*>(rootNode->node0);
offset\u ptr N1=static\u cast(rootNode->node0);
我得到:

错误C2440:“静态\u转换”:无法从“boost::进程间::偏移量\u ptr”转换为“CSNode4*”

(MSVC 2010,boost 1.42)


我做错了什么?如何修复它?

我假设CSNode4相当于CNode4。由于node0是一个offset\u ptr,当然不能将其静态\u转换为CSNode4的指针。您应该直接使用offset_ptr的复制构造函数:

boost::interprocess::offset_ptr<CSNode4> N1(rootNode->node0); 
boost::进程间::偏移量\u ptr N1(rootNode->node0);

谢谢,但仍然无法工作,现在我得到:访问冲突读取位置0x0075。。。我还尝试使用get()成员:offset\u ptr node0\u pt;node0_pt=rootNode->node0;(node0_pt.get())->…也不工作。。。其他:CNode4而不是CSNode4是语法,更改为,分配器仅用于向量成员,不应该影响这一点吗?