2014-09-03 51 views
-5

我必須在程序中使用void**。我正在寫下面的代碼。請指導我錯在哪裏。在C++程序中使用void **

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*不是指針,object類型

請指導我該怎麼做。

+0

爲什麼你不使用標準庫容器,比如'std :: vector'呢? – tadman 2014-09-03 20:57:25

+0

也許OP是與一些C API接口? – cdhowie 2014-09-03 20:57:43

+0

您發佈的代碼中沒有違法行爲,除了'k'的缺失定義。你是否試圖在某處取消引用'rt.dataptr [0]'? – 2014-09-03 20:58:35

回答

0

我可以重現這個錯誤only if I add something like

*rt.dataptr[0] = 1; 

在增加,G ++抱怨:

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 2014-09-03 21:05:30

+1

@ hmm嗯,這實際上可能是比我更好的猜測... – 2014-09-03 21:07:57