ANSI C++ forbids implicit conversion from `void *' in assign

I compile the follow code in C++:
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/mman.h>

int main(int argc, char *argv[])
{
int i;
unsigned char *addr, c;

/* Map BIOS ROM /
addr = mmap(0, 0x10000, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_PHYS, NOFD, 0xf0000);
if (addr == MAP_FAILED) {
fprintf(stderr, “mmap failed : %s\n”,
strerror(errno));
return EXIT_FAILURE;
}
printf(“Map addr is %p\n”,(void
) addr);

for (i = 0; i < 3 * 80; ++i) {
c = *addr++;
if (c >= ’ ’ && c <= 0x7f)
putchar(c);
else
putchar(’.’);
}

return EXIT_SUCCESS;
}

the problem is :ANSI C++ forbids implicit conversion from `void *’ in assignment.( addr = mmap(0, 0x10000, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_PHYS, NOFD, 0xf0000);
).

But in C ,it compile good .

C++ requires casts for all assignments from void.

i.e.

addr = (unsigned char *)mmap(…)

Thanks a lot !!!
:slight_smile: