【问题标题】:Invalid conversion from 'void*' to 'char*' when using mmap()使用 mmap() 时从 'void*' 到 'char*' 的无效转换
【发布时间】:2014-06-09 03:01:05
【问题描述】:

我有以下sn-p:

char* filename;
unsigned long long int bytesToTransfer;
int fd, pagesize;
char *data;

fd = open(filename, O_RDONLY);
if (fd==NULL){
    fputs ("File error",stderr);
    exit (1);
}

cout << "File Open: " << filename << endl;

pagesize = getpagesize();
data = mmap((caddr_t)0, bytesToTransfer, PROT_READ, MAP_SHARED, fd, 0);
if (*data == -1) {
    fputs ("Memory error",stderr);
    exit (2);
}

cout << "Data to Send: " << data << endl;

但是当我编译时,我收到:

错误:从“void*”到“char*”的无效转换 [-fpermissive] 数据 = mmap((caddr_t)0, bytesToTransfer, PROT_READ, MAP_SHARED, fd, 0);

有人可以给我一个提示吗?

【问题讨论】:

    标签: c++ parameters mmap void-pointers


    【解决方案1】:

    C++ 不执行来自 void* 的隐式强制转换,您必须明确说明

    data = static_cast<char*>(mmap((caddr_t)0, bytesToTransfer, PROT_READ, MAP_SHARED, fd, 0));
    

    【讨论】:

      【解决方案2】:

      mmap 返回一个 void*。数据是一个字符*。你需要投射它:

      data = static_cast<char*>( mmap((caddr_t)0, bytesToTransfer, PROT_READ, MAP_SHARED, fd, 0) );
      

      这将尝试在编译时解决类型问题。

      【讨论】:

        猜你喜欢
        • 2011-07-03
        • 1970-01-01
        • 2012-04-26
        • 1970-01-01
        • 2017-06-30
        • 2017-04-15
        • 2013-08-19
        • 1970-01-01
        • 2011-11-26
        相关资源
        最近更新 更多