2012-02-16 16 views
1

マップを作成しました。別のスレッドでそのマップが必要なので、マップを指すポインタを作成して他のスレッドに送ります。しかし、マップの値がNULL(Pointer)でないかどうか調べたいときにエラーが発生します。ポインタマップ内のポインタが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

ところでG ++エラーが '** handle2''」の '演算子*' には一致していませんこれは演算子の優先順位の問題であることを(少なくとも私に)明確にしています...それは私が知っているのですが、コード内でシステム(「一時停止」)を見るといつも不快に感じます。それが不要であると感じる方法を見つける(その "必要性"はちょうど道yから来るから) – ShinTakezou

答えて

3

handle2は、マップへのポインタですので、handle2[0](に相当)はマップそのものです。エラーが示すように、これは条件式として使用することはできません。

handle2がヌルかどうかを確認する場合は、ちょうどhandle2と言ってください。キー0のマップ要素の場合は、(*handle2)[0]が必要です。

+0

彼のケースはスレッドセーフではなく、複数のスレッドを使用していることにも注意してください。 – crush

2
if(*handle2[0]) 

一つの可能​​性:

if((*handle2)[0]) 

別の(私にとってはやや不可解):

if(handle2[0][0]) 
関連する問題