2012-02-16 88 views
1

我製作了一張地圖,我在另一個線程中需要該地圖,因此我製作了一個指向我的地圖並將其發送給另一個線程的指針。但是當我想查看一個映射中的值是否爲NULL(指針)時,我得到一個錯誤。如何查看指針地圖中的指針是否爲0

這是一個例子codee:

#include <iostream> 
#include <vector> 
#include <map> 

using namespace std; 


int main() 
{ 
    int test = 1; 

    map<int,void *> handle; 
    map<int,void *> * handle2; 

    handle[0] = &test; 

    handle2 = &handle; 


    if(*handle2[0]) 
    { 
     cout << "Works\n"; 
    } 

    system("Pause"); 


    return false; 
} 

這是我的錯誤:

錯誤C2451:類型的條件表達式 '的std ::地圖< _Kty,_Ty>' 是非法的

在這種情況下,我如何剔除0指針?

+0

順便說一句克++錯誤是'不匹配在「** handle2'' '運算符*'這使得它更清晰(至少對我來說)這是一個操作優先級問題......我知道這是OT,但是當我在代碼中看到一個系統(「暫停」)時,我總覺得不舒服,我建議你找到一種感覺不必要的方式(因爲它的「需求」只是來自y的方式ou運行你的代碼) – ShinTakezou 2012-02-16 18:35:08

回答

3

handle2是指向地圖的指針,所以handle2[0](相當於*handle2)是地圖本身。如錯誤所述,這不能用作條件表達式。

如果你想檢查handle2是否爲空,就說handle2;對於鍵爲0的地圖元素,您需要(*handle2)[0]

+0

還應該注意到他的情況不是線程安全的,而且他正在使用多個線程。 – crush 2012-02-16 18:25:52

2
if(*handle2[0]) 

一種可能性:

if((*handle2)[0]) 

另一個(略隱蔽對我來說):

if(handle2[0][0])