Вопрос по c, c++ – Разыменование пустого указателя в C ++
Я пытаюсь реализовать общий связанный список. Структура для узла выглядит следующим образом -
typedef struct node{
void *data;
node *next;
};
Теперь, когда я пытаюсь присвоить адрес данным, предположим, например, для int, например:
int n1=6;
node *temp;
temp = (node*)malloc(sizeof(node));
temp->data=&n1;
Как я могу получить значение n1 из узла? Если я говорю -
cout<<(*(temp->data));
Я получил -
`void*' is not a pointer-to-object type
Не получает ли указатель void тип-тип с указателем типа int, когда я присваиваю ему адрес типа int?
cout
не C.
David Heffernan
Вы должны сначала ввестиvoid*
к действительному действительному типу указателя (например,int*
) сообщить компилятору, сколько памяти вы ожидаете для разыменования.
Указатель void не может быть разыменован. Вам нужно привести его к подходящему не пустому типу указателя. Вопрос касается C ++, поэтому я предлагаю рассмотреть возможность использования шаблонов для достижения вашей цели:
template <typename T> struct node
{
T *data;
node<T> *next;
};
затем:
int n1=6;
node<int> *temp = new node<int>();
temp->data=&n1;
И наконец:
cout << (*(temp->data));
Типизация возможна, но это будет небезопасное решение в стиле C, а не C ++.