翻译单元声明为全局变量的声明抛出异常。
Visual Studio 2017社区15.9.5版,已安装C ++ / WinRT扩展。项目是从“空白应用程序(C ++ / WinRT)模板”开始的。
我希望变量数组SolidColorBrush myBrushes[2];
仅在单个转换单元中全局使用。它在翻译单元的名称空间中声明。
我尝试完全限定类型,将类型标记为static
,然后尝试不使用数组名称。
#include "pch.h"
#include "MainPage.h"
//#include <winrt/Windows.UI.Xaml.Media.h>
using namespace winrt;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
//*************************************************************************************************
namespace winrt::event_Experiment::implementation
{
//*************************************************************************************************
//Windows::UI::Xaml::Media::SolidColorBrush myBrushes[2];
//static SolidColorBrush myBrushes[2];
SolidColorBrush myBrushes[2];
//*************************************************************************************************
MainPage::MainPage()
{
InitializeComponent();
//myBrush.Color(Windows::UI::Colors::Blue());
//myBrush[1].Color(Windows::UI::Colors::Red());
//myStackPanel().Background() = myBrush;
//SolidColorBrush tempBrush = SolidColorBrush(winrt::Windows::UI::Colors::Blue());
//myBrush(tempBrush);
myButton2().Click({ this, &MainPage::ClickHandler2 });
myStackPanel().PointerPressed({ this, &MainPage::spPointerPressed });
//myBrushes[0].Color(Windows::UI::Colors::Blue());
//myBrushes[1].Color(Windows::UI::Colors::Red());
}
Microsoft在2018年5月发布的C ++ / WinRT更新声明中声称,它是直接的C ++ 17,因此可以进行这样的声明。
我该如何使用它?谢谢。
答案 0 :(得分:1)
“ Microsoft在2018年5月发布的C ++ / WinRT更新声明中声称,它是直接的C ++ 17,因此可以进行这样的声明。”
C ++ / WinRT是标准的C ++ 17,作为标准的C ++库,类型的构造函数可能会引发异常,表明您使用的是错误的。在这种情况下,构造函数将失败,因为SolidColorBrush只能在Xaml UI线程上构造。正如Raymond在他的评论中指出的那样,您需要确保在创建Xaml资源之前初始化Xaml。一种方法是使用nullptr构造函数将构造推迟到以后。例如:
SolidColorBrush brush{ nullptr };
然后在准备好并准备好后即可为画笔指定一个值。
brush = SolidColorBrush(...);