如何将结构分配给共享内存ic++;? 我有一个模糊的想法,如何在C中使用共享内存,我试图在C++程序中使用相同的方法。 我想共享一个结构: typedef struct { string passw; string encoded; string tries; char steps; }gameInfo; gameInfo *gI;

如何将结构分配给共享内存ic++;? 我有一个模糊的想法,如何在C中使用共享内存,我试图在C++程序中使用相同的方法。 我想共享一个结构: typedef struct { string passw; string encoded; string tries; char steps; }gameInfo; gameInfo *gI;,c++,struct,shared-memory,C++,Struct,Shared Memory,这就是我试图做到的: int memory; memory = shmget(IPC_PRIVATE, sizeof(gameInfo)*max_players, IPC_CREAT | 0600); if(memory==-1) {printf("Shared memory error");} (稍后) 我得到“error:no match for'operator=”(操作数类型为'gameInfo'和'void*)”错误。 最快的解决办法是什么 即使您设法理解了如何使用place

这就是我试图做到的:

int memory;
memory = shmget(IPC_PRIVATE, sizeof(gameInfo)*max_players, IPC_CREAT | 0600);
if(memory==-1)
    {printf("Shared memory error");}
(稍后)

我得到“error:no match for'operator=”(操作数类型为'gameInfo'和'void*)”错误。
最快的解决办法是什么

即使您设法理解了如何使用placement,您也无法使用POSIX共享内存在Linux上运行您的示例


因为不是POD类,并且包含未指定角色和行为的内部指针。

查找位置
new()
。请注意,在执行分配时,还必须确保
std::string
使用共享内存存储字符串内容。。。因此,您应该使用普通的C字符数组。固定长度,作为结构成员包装在结构中。无论如何,您的方法是有缺陷的:std::strings默认使用堆,因此无法在共享内存中生存。
gI=(gameInfo*)shmat(内存,NULL,0)
(但正如其他人所说,您不能将
std::string
与共享内存一起使用),但是可以为标准库中的所有内容指定分配器。但是,它不再是通常的
std::string
*gI = shmat(memory,NULL,0);