Windows runtime 公共成员的签名包含本机类型 类没有标记为public本身,所以看来您只从其他C++内部(作为源)消费这个类,并且不打算将其发布给其他WRET消费者。

Windows runtime 公共成员的签名包含本机类型 类没有标记为public本身,所以看来您只从其他C++内部(作为源)消费这个类,并且不打算将其发布给其他WRET消费者。,windows-runtime,c++-cx,Windows Runtime,C++ Cx,当我试图编译它时,我得到以下错误: {ctor}公共成员的签名包含本机类型。我想这是因为我使用的是std::string而不是Platform::string,我如何修复它?您不能在托管引用类中保存本机类型 只能保存一个指向非托管对象的指针(指针毕竟是一个数字,这就是为什么它被允许)。 < P>类没有标记为public本身,所以看来您只从其他C++内部(作为源)消费这个类,并且不打算将其发布给其他WRET消费者。 如果是这种情况,您可以将构造函数设置为internal,而不是public,该构造

当我试图编译它时,我得到以下错误:


{ctor}公共成员的签名包含本机类型
。我想这是因为我使用的是std::string而不是Platform::string,我如何修复它?

您不能在托管引用类中保存本机类型


只能保存一个指向非托管对象的指针(指针毕竟是一个数字,这就是为什么它被允许)。

< P>类没有标记为public本身,所以看来您只从其他C++内部(作为源)消费这个类,并且不打算将其发布给其他WRET消费者。 如果是这种情况,您可以将构造函数设置为
internal
,而不是
public
,该构造函数在该组件中是公共的,在外部不可见。如果这是您的预期用途,那么它可以只是一个常规的“类”而不是“ref类”。如果您确实希望跨WinRT边界使用它,但不需要构造函数,则可以将其设置为“public ref class”,并将构造函数标记为“internal”。这取决于你的情况

相反,如果您希望将该类公开,并且拥有一个跨WinRT边界可用的公共构造函数(这样它就可以被C#/VB/JS使用),那么您需要使用WinRT类型(例如
Platform::String
)。在您的类中,存储类型仍然可以是
std::string
(尽管我建议使用std::wstring,否则您需要进行从宽到窄的转换,因为Platform::string是宽字符串)


要在这两种类型之间转换,请使用
Platform::String::Data()
获取可用于构造
std::wstring
的底层
wchar\u t*
。类似地,平台::String 有一个构造函数,它采用了 WCARAYT*<代码>(可以从 STD::WStr::CyString()/代码>中获得。

这看起来不像C++。我认为你需要一个语言标签。这是管理C++,不是C++ + DavidKernin,对不起,我的错误。这是微软对.NET平台的C++改编。它不是标准C++,不,它允许这样做。这是C++语言,它允许VB.NET和JavaScript等语言直接调用C++代码。当然,它不能用STD::String工作,JavaScript了解C++类的bean。