2014-01-13 21 views
-1
void* val = 0; 
cout << "\n\tSelect a value to enter: "; cin >> val;   
SDI::StoredData* temp = new SDI::StoredData(); 
temp->data = val;  
ARR->insert(temp,0,false); 

^這個,有效。值被存儲,我的getAllValues功能完美。試圖設置自定義數組的空值*,只有在void *從std :: cin設置時纔會起作用

做同樣的事情,像這樣:

void* val = new int(10); 
SDI::StoredData* temp = new SDI::StoredData(); 
temp->data = val;  
ARR->insert(temp,0,false); 

int val = 10; 
void* val = &val; 
SDI::StoredData* temp = new SDI::StoredData(); 
temp->data = val;  
ARR->insert(temp,0,false); 

或任何其他變化返回一個空值,爲什麼地球上會出現這種情況?是的,我知道,我不應該使用void*,但這是一個要求。謝謝!

編輯:

for(int i = 0; i<max; i++) 
{  
    if(data[i].data!= nullptr) 
    { 


    int *p = (int*)data[i].data; 


    } 
} 
+0

如果'* temp'的目的是超過這個代碼所在的範圍,最後一個例子將不起作用,因爲以後本地不會存在。 – cHao

+0

什麼不工作?提供一個顯示問題的[SSCCE](http://sscce.org)! –

+0

'cin'設置指針的值(即它指向的位置)的值,而不是指針指向的數據。我懷疑你沒有返回指針存儲位置的實際值(例如2看起來一目瞭然),而是返回指針的值(即它指向的存儲位置)。 – RageD

回答

0

讓我們來看看代碼, 「作品」。

void* val = 0; 
cout << "\n\tSelect a value to enter: "; cin >> val; 

你打電話cin.operator>>(void*),其工作非常像干將數字類型 - 它讀取一個數字,並將其存儲在val

所以在這裏,temp->data不是指向任何東西;它是輸入的實際數字。

至於你的第二個片段:

void* val = new int(10); 

在這種情況下,val不是數字。這是一個號碼的地址。 (是的,地址在技術上也是一個數字,這是你的第一個片段的唯一原因,但這裏不是10;它類似於0x30528680包含的對象的地址數字爲10)

至於你的第三個:

int val = 10; 
void* val = &val; 

如果這甚至編譯,val將是一個指向一個局部變量,這將只存在直到它在函數結束的瞬間,你回報,價值會指向誰知道什麼。 (當然,它不會編譯,因爲你正在試圖重新定義val ...)

+0

我可否指出第三件事不應該編譯。 –

+0

好的,一切都很有道理,我怎樣才能在沒有CIN的情況下將一個int'數字'轉換爲一個void?作爲地址?或者我應該在某個地方解除引用 – Broak

+0

@ Cheersandhth.-Alf:好點。編輯了一下。行! – cHao