Пример «Голые кости» для воспроизведения вышеуказанной ошибки:
#include <iostream>
using namespace std;
int main() {
int myint = 9; //good
void *pointer_to_void; //good
pointer_to_void = &myint; //good
cout << *pointer_to_void; //error: 'void*' is not a pointer-to-object type
}
Приведенный выше код неверен, поскольку он пытается разыменовать указатель на пустоту. Это не разрешено.
Теперь запустите следующий код, приведенный ниже. Если вы понимаете, почему работает следующий код, а вышеприведенный код - нет, вы будете лучше подготовлены к тому, чтобы понять, что происходит под капотом.
#include <iostream>
using namespace std;
int main() {
int myint = 9;
void *pointer_to_void;
int *pointer_to_int;
pointer_to_void = &myint;
pointer_to_int = (int *) pointer_to_void;
cout << *pointer_to_int; //prints '9'
return 0;
}