Windows phone 8 如何在类中声明静态字段

Windows phone 8 如何在类中声明静态字段,windows-phone-8,c++-cli,Windows Phone 8,C++ Cli,我有一个XAML+DirectX应用程序,我想将静态字段添加到我的“interop”类中: 它并没有说“在一个类中只能初始化静态常量整型数据成员” 如果我将其更改为const static int VALUE=0然后它仍然不编译,错误为“非值类型不能有任何公共数据成员” 我做了什么? WrRT公共类有很多限制,以确保它们可以用多种语言包括C++、JavaScript和C语言来消耗品。这就是为什么会出现错误C3984。您不能有公共字段,而必须使用。您可以将其设置为只读属性: property in

我有一个XAML+DirectX应用程序,我想将静态字段添加到我的“interop”类中:

它并没有说“在一个类中只能初始化静态常量整型数据成员”

如果我将其更改为
const static int VALUE=0然后它仍然不编译,错误为“非值类型不能有任何公共数据成员”


<>我做了什么?

WrRT公共类有很多限制,以确保它们可以用多种语言包括C++、JavaScript和C语言来消耗品。这就是为什么会出现错误C3984。您不能有公共字段,而必须使用。您可以将其设置为只读属性:

property int VALUE
{
    int get() { return 0; }
}
<> P>记住,属性是函数调用,通常不能被优化,所以在设计接口时应该考虑这一点。

如果您打算让C++只使用这个类,请考虑不要使用WrrT类,而是使用一个简单的C++类,使用C< >代码> STD::UNQuYGYPTR 或<代码> STD::SyrdYPPTR < /C>。在这种情况下,您当然可以一如既往地使用公共字段方法


<> P>原始问题是一个不特定于WRRT的C++语言通用约束。错误(您在发布的文本中使用的是VS 2012)在C++11中更为常见。

在类主体内声明,并在类主体外定义/分配<代码>静态int值<代码>int Direct3DInterop::VALUE=0注意,如果你只想在C++内部是“公共的”而不是通过WinRT来投影,你可以使用“内部”可见性。
property int VALUE
{
    int get() { return 0; }
}