C ++中等效的mmap
是什么?
我的代码如下
LCDdata = mmap(NULL, iFrameBufferSize, PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fb_fd, 0);
LCDdata
unsigned char
类型为pointer
,iFrameBufferSize
为int
类型且fb_fd
为static int
类型。
当我使用arm g++
工具链编译它时,它给出了如下错误
error: invalid conversion from 'void*' to 'unsigned char*' [-fpermissive]
那么如何使用任何等效类型函数而不是mmap
?
我应该包含哪个头文件?这个新行的语法将如何变成?
答案 0 :(得分:3)
C ++等价物是auto LCDdata = static_cast<unsigned char*>(mmap(...
在C ++中,我们更喜欢仅在初始化变量时定义变量,因此我们通常不需要再指定变量。在这里,我们不需要重复unsigned char*
。
答案 1 :(得分:2)
C允许将void*
分配给任何类型的指针而不进行强制转换。 C ++没有。 C程序员已经抱怨这个问题很长时间(malloc
是最常见的抱怨),但它不太可能改变。
解决方案是添加演员阵容。如果源需要编译为C,请使用C样式转换:
LCDdata = (unsigned char*)mmap(...);
否则使用C ++强制转换
LCDdata = static_cast<unsigned char*>(mmap(...));
如果你想做更激烈的事情,你可以调查Boost Interprocess。这会给你RAII。