Generally in C++, void* is not used. In C++ the normal way to deal with things that can be of several types is to either use templates, or a type safe variant kind of structure.
You might use void* if you have to interact with a C API, but other than that it's pretty rare.

Comparing char* to void* is less likely to be a problem as far as the compiler is concerned because they are both the same level of indirection.
However an int is not a pointer, and it could very well be that rather than convert the pointer to an int, the API you're using might actually be giving you a pointer to an int, in which case you'd need to typecast to an int* and then dereference it.
The compiler is right to complain.