当我尝试将c ++ / cli值结构定义为字典中的TValue时,我在c ++ / cli中的语法出现问题
我这样做是因为我想在本机类指针和system :: String(以String作为键)之间维护一个映射,所以将本机指针包装在一个struct中。
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);
}
Thi给出编译错误:错误C2664:'System :: Collections :: Generic :: Dictionary :: TryGetValue':无法将参数2从'MyStruct ^'转换为'MyStruct%'
我尝试了各种MyStruct声明但没有成功。
答案 0 :(得分:7)
您的代码段中有许多细微的语法错误,您可能会从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...
};
答案 1 :(得分:2)
应该只是
m_LigandToModelMap.TryGetValue(file, m)
在C ++中,byref参数不提供任何调用方提示。