2014-09-03 8 views
-5

Я должен использовать void** в программе. Я пишу следующий код. пожалуйста, направляйте меня, где я ошибаюсь.использование void ** в программе C++

struct kdnode 
{ 
kdnode* lch; 
int k; 
void **dataptr; 
kdnode* rch; 
}; 

тогда я задаю

kdnode rt; 
rt.dataptr=new void*[k]; 
rt.dataptr[0]=new int; 

было также это Разыменование участия:

*(rt->dataptr[0])=n; //n is an initialized integer value. 

в основном я хочу, чтобы назначить элементы массива недействительных указателей на указатели различных типов данных , Как компилятор бросает ошибку:

void* не указатель на тип объекта

Пожалуйста, руководство мне, что делать.

+0

Почему вы не используете контейнеры стандартной библиотеки, такие как 'std :: vector' для этого? – tadman

+0

Возможно, OP взаимодействует с некоторыми API C? – cdhowie

+0

Ничего незаконного в коде, который вы опубликовали, кроме, возможно, отсутствующего определения 'k'. Вы пытаетесь разыменовать 'rt.dataptr [0]' где-нибудь? –

ответ

0

я могу воспроизвести эту ошибку only if I add something like

*rt.dataptr[0] = 1; 

С добавлением, г ++ жалуется:

main.cpp:13:14: error: ‘void*’ is not a pointer-to-object type 
*rt.dataptr[0] = 1; 

Вы не можете разыменовывать void *. Верните его в исходный тип (int * в этом случае), если вы хотите разыменовать его.

+0

FWIW, мое предположение о том, что OP фактически имеет 'void * dataptr;' вместо 'void ** dataptr;'. – hvd

+1

@ hvd Хм, это может быть лучше, чем мое ... –

Смежные вопросы