2011-08-06 8 views
1

辞書でTValueとしてC++/cliの値構造体を定義しようとすると、C++/cliの構文に問題があります辞書のTValueタイプとしてC++/cliクラスを指定する正しい構文は何ですか

ネイティブクラスポインタとsystem :: String(キーをStringとして)の間のマップを維持したいので、構造体にネイティブポインタをラップしています。

value struct MyStruct 
{ 
    NativeClass *m_p; 
} 

Dictionary<System::String ^, MyStruct> MyMap; 

NativeClass* FindLigandModelMap(System::String ^file) 
{ 
    MyStruct m; 
    if (m_LigandToModelMap.TryGetValue(file, %m)) <--- ERROR HERE 
     return(m.m_p); 
    return(NULL); 
} 

ティは、コンパイラエラーいます:エラーC2664: 'システム::コレクション::ジェネリック::辞書:: TryGetValueは': '体mystructの%' 'に体mystruct ^' からパラメータ2を変換することはできません

を私はMyStructのさまざまな宣言を成功させて試しました。引数がすべての呼び出し元側のヒントを提供しないBYREF

答えて

2

は、ちょうど

m_LigandToModelMap.TryGetValue(file, m) 

C++にする必要があります。

7

スニペットの微妙な構文エラーがたくさんありますが、あなたはC++/CLIプライマーから利益を得ることができるが:

  1. 値の型宣言は、セミコロンが必要です。 C++規則
  2. 辞書<は参照型ですが、帽子が必要です。 C++/CLIルール
  3. 参照で引数を渡すことは、宣言で暗黙指定されています。%を使用しないでください。 C++ルール
  4. NULLはマネージコードでは無効です。nullptrを使用する必要があります。 C++/CLIの規則このよう

#include "stdafx.h" 
#pragma managed(push, off) 
class NativeClass {}; 
#pragma managed(pop) 

using namespace System; 
using namespace System::Collections::Generic; 

value struct MyStruct 
{ 
    NativeClass *m_p; 
}; // <== 1 

ref class Example { 
public: 
    Dictionary<System::String ^, MyStruct>^ MyMap; // <== 2 

    NativeClass* FindLigandModelMap(System::String ^file) 
    { 
     MyStruct m; 
     if (MyMap->TryGetValue(file, m)) // <== 3 
      return(m.m_p); 
     return nullptr; // <== 4 
    } 
    // etc... 
}; 
関連する問題