C ++:Boost进程间内存映射文件错误

影子

我正在尝试使用答案创建一个内存映射文件,但出现编译错误。这是我的代码:

namespace bi = boost::interprocess;
std::string vecFile = "vector.dat";
bi::managed_mapped_file file_vec(bi::open_or_create,vecFile.c_str(), sizeof(struct Rectangle) * data_size);

typedef bi::allocator<struct Rectangle, bi::managed_mapped_file::segment_manager> rect_alloc;
typedef std::vector<struct Rectangle, rect_alloc>  MyVec;

MyVec * vecptr = file_vec.find_or_construct<MyVec>("myvector")(file_vec.get_segment_manager());

vecptr->push_back(random_rectangle);

结构是这样的:

struct Rectangle{

  Rectangle(float *minArr, float *maxArr, int arr, int exp, int ID){
    this->arrival = arr;
    this->expiry = exp;
    this->id = ID;
    for(int i=0; i < 2; i++){
      min[i] = minArr[i];
      max[i] = maxArr[i];
    }

  int arrival, expiry, id;
  float min[2];
  float max[2];
}

我得到的错误是:编译器无法从'boost :: interprocess :: offset_ptr'推导出'_Ty *'的模板参数。我究竟做错了什么?

在我看来还可以:

Live On Coliru

#include <boost/interprocess/managed_mapped_file.hpp>
#include <vector>

namespace bi = boost::interprocess;

struct Rectangle {
    Rectangle(float *minArr, float *maxArr, int arr, int exp, int ID) {
        this->arrival = arr;
        this->expiry = exp;
        this->id = ID;
        for (int i = 0; i < 2; i++) {
            min[i] = minArr[i];
            max[i] = maxArr[i];
        }
    };

    int arrival, expiry, id;
    float min[2];
    float max[2];
};

namespace Shared {
    using segment = bi::managed_mapped_file;
    using mgr     = segment::segment_manager;

    using alloc   = bi::allocator<Rectangle, mgr>;
    using vector  = std::vector<Rectangle, alloc>;
}

Rectangle random_rectangle() { 
    float dummy[2] = { };
    return { dummy, dummy, 0, 0, 0 }; 
}

int main() {
#define data_size 10
    std::string vecFile = "vector.dat";
    Shared::segment mmem(bi::open_or_create, vecFile.c_str(), (10u<<10) + sizeof(struct Rectangle) * data_size);

    Shared::vector *vecptr = mmem.find_or_construct<Shared::vector>("myvector")(mmem.get_segment_manager());

    vecptr->push_back(random_rectangle());
}

如果编译不完全相同,请记下您的库和编译器的版本。考虑升级。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C++中的进程内存映射

来自分类Dev

解析内存映射文件C

来自分类Dev

C / C ++-使用mmap的内存映射文件

来自分类Dev

重载内存映射文件加载器(C ++)

来自分类Dev

如何使用内存映射文件C#读写文件?

来自分类Dev

使用C的内存映射文件中的相对指针

来自分类Dev

内存映射的文件代码在C ++中无法正常工作

来自分类Dev

使用C的内存映射文件中的相对指针

来自分类Dev

如何在C(MacOS)中获取有关进程的虚拟内存映射的信息

来自分类Dev

我正在尝试使用增强内存映射文件中的矢量值创建C ++映射

来自分类Dev

运行c ++任务的python子进程读取文件错误

来自分类Dev

C ++内存泄漏-Boost库

来自分类Dev

C ++意外的内存错误

来自分类Dev

C ++ Boost错误

来自分类Dev

C ++ Boost错误

来自分类Dev

C ++ Boost Link错误

来自分类Dev

Android进程内存映射

来自分类Dev

带有随机访问C ++和Python的不良Linux内存映射文件性能

来自分类Dev

C进程中的Lua内存泄漏

来自分类Dev

在C ++中终止进程并释放内存

来自分类Dev

内存映射文件无法通过创建它的进程找到

来自分类Dev

C-内存映射B树

来自分类Dev

C ++中的内存映射流数据

来自分类Dev

C ++中的内存高效双向映射

来自分类Dev

以指针为键的C ++映射。内存管理

来自分类Dev

C中的内存分配错误

来自分类Dev

C ++错误的内存分配异常

来自分类Dev

C ++中的内存管理错误

来自分类Dev

libcurl C ++的内存访问错误