C++ cli Marshall对象属性生成编译器错误 我正在使用BigDE类来处理非托管C++库。我对以下(简化的)示例代码有问题: ref class ManagedClass { private: UnManagedClass* m_UnManaged; String^ m_someString; public: UserAgent_Managed(String^ someString) { m_someString = someString; // Compiler error // Severity Code Description Project File Line Suppression State Error C2665 'msclr::interop::marshal_as': none of the 3 overloads could convert all the argument // types std::string unManagedString = msclr::interop::marshal_as<std::string>(m_someString); // Following works // std::string unManagedString = msclr::interop::marshal_as<std::string>(someString); m_UnManaged = new UnManagedClass(unManagedString); } }; ref类ManagedClass { 私人: 非托管类*m_非托管; 字符串^m\u someString; 公众: UserAgent\u托管(字符串^someString) { m_someString=someString; //编译错误 //严重性代码描述项目文件行抑制状态错误C2665“msclr::interop::marshal_as”:3个重载都无法转换所有参数 //类型 std::string unManagedString=msclr::interop::marshal_as(m_someString); //以下作品 //std::string unManagedString=msclr::interop::marshal_as(someString); m_UnManaged=新的非托管类(unManagedString); } };

C++ cli Marshall对象属性生成编译器错误 我正在使用BigDE类来处理非托管C++库。我对以下(简化的)示例代码有问题: ref class ManagedClass { private: UnManagedClass* m_UnManaged; String^ m_someString; public: UserAgent_Managed(String^ someString) { m_someString = someString; // Compiler error // Severity Code Description Project File Line Suppression State Error C2665 'msclr::interop::marshal_as': none of the 3 overloads could convert all the argument // types std::string unManagedString = msclr::interop::marshal_as<std::string>(m_someString); // Following works // std::string unManagedString = msclr::interop::marshal_as<std::string>(someString); m_UnManaged = new UnManagedClass(unManagedString); } }; ref类ManagedClass { 私人: 非托管类*m_非托管; 字符串^m\u someString; 公众: UserAgent\u托管(字符串^someString) { m_someString=someString; //编译错误 //严重性代码描述项目文件行抑制状态错误C2665“msclr::interop::marshal_as”:3个重载都无法转换所有参数 //类型 std::string unManagedString=msclr::interop::marshal_as(m_someString); //以下作品 //std::string unManagedString=msclr::interop::marshal_as(someString); m_UnManaged=新的非托管类(unManagedString); } };,c++-cli,marshalling,C++ Cli,Marshalling,当我调用std::string unManagedString=msclr::interop::marshal_as(m_someString)时

当我调用std::string unManagedString=msclr::interop::marshal_as(m_someString)时m_someString,编译器告诉我没有匹配的
marshal_as
方法签名。如果我对
someString
参数执行相同的操作,编译器不会抛出错误。我错过了什么?
m_someString
someString
都具有类型
String^

Thx

函数的
封送函数()不太友好,它缺少一个重载,无法编译此代码。您可以通过查看显示哪些重载可用的IntelliSense弹出窗口来解决这个问题。您尝试使用的是第四个:

  std::string marshal_as<std::string, System::String^>(System::String^ const & _from_obj)
   auto temp = this->m_someString;   // Intentional temporary
   auto str = marshal_as<std::string>(temp);