Search code examples
c++parametersmmapvoid-pointers

Invalid conversion from 'void*' to 'char*' when using mmap()


I have the following snippet:

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;

But when I compile, I receive:

error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive] data = mmap((caddr_t)0, bytesToTransfer, PROT_READ, MAP_SHARED, fd, 0);

Could someone give me a hint at what's wrong?


Solution

  • C++ does not perform implicit casts from void*, you must make this explicit

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