【问题标题】:Windows Phone 8.0 C++ member initializationWindows Phone 8.0 C++ 成员初始化
【发布时间】:2026-01-02 03:25:02
【问题描述】:

考虑以下设置。我有一个导入 Windows Phone 运行时组件的 Windows Phone 项目。该组件包括一个静态库。静态库是我在多个项目中使用的共享代码。

如果我将 lib 创建为 Windows Phone 8.1 静态库,一切正常。当我尝试将库创建为 Windows Phone 8.0 项目时,我的成员初始化不起作用。我的成员定义如下:

MyClass{
  private:
    bool _myMember = false;
}

就像我提到的,这在 WP 8.1 上运行良好,但在 WP 8.0 上却失败了。 Visual Studio 打印以下错误消息:

Error   77  error C2864: 'MyClass' : only static const integral data members can be 
initialized within a class  <MyPath>\MyClass.h  141 1   MyLib

我知道成员初始化的内联样式是在 C++11 中添加的,而 Micosoft 最近才添加了此功能。 有没有人知道我是否可以让它适用于 Windows Phone 8.0 项目?我的库非常大,更改所有初始化将是一项非常不满意的工作。

【问题讨论】:

  • 一种想法是将成员从简单的 bool 更改为自定义类型,该类型具有与 bool 的隐式转换并将其自身初始化为 false。然后你不需要在其他任何地方更改任何代码

标签: c++ c++11 windows-phone-8 windows-runtime initialization


【解决方案1】:

遗憾的是,定位到手机 8.0 意味着您将使用 v11 平台工具集。因此,您使用的是不支持此功能的 VS2012 编译器。

也许可以使用来自 VS2013 的 v12 编译器将您的代码编译为静态库,并将其链接到针对手机 8.0 的框架项目中(运行时库中的模数差异)。

我有一些轶事证据表明它以相反的方式成功(v11 编译的静态库链接到 v12 运行时组件),但该库主要包含 C 代码。

【讨论】:

  • 随着它的巡演。似乎没有办法让它在 WP 8.0 上运行。希望 WP 10 出来后能得到广泛的适应,这样问题就不会再存在了。