Uwp 获得;返回';自动';在定义之前不能使用它";在C+中使用CoreDispatcher::RunAsync时+/WinRT项目

Uwp 获得;返回';自动';在定义之前不能使用它";在C+中使用CoreDispatcher::RunAsync时+/WinRT项目,uwp,c++-winrt,Uwp,C++ Winrt,在我的C++/WinRT项目中,我试图在UI线程上运行一些代码,但得到一个错误,显示: “winrt::impl::consume\u Windows\u UI\u Core\u ICoreDispatcher::RunAsync”:返回“auto”的函数在定义之前不能使用” 我调用的方法如下: Dispatcher().RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal,[=]() { //要执行的代码。 }); 该实现来自自

在我的C++/WinRT项目中,我试图在UI线程上运行一些代码,但得到一个错误,显示:

“winrt::impl::consume\u Windows\u UI\u Core\u ICoreDispatcher::RunAsync”:返回“auto”的函数在定义之前不能使用”

我调用的方法如下:

Dispatcher().RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal,[=]()
{
//要执行的代码。
});
该实现来自自动生成的winrt文件,该文件返回
auto
作为返回类型

模板
结构消耗\u Windows\u UI\u核心\u ICoreDispatcher
{
[[nodiscard]]自动HasThreadAccess()常量;
自动处理事件(Windows::UI::Core::CoreProcessEventsOption常量和选项)常量;
自动运行异步(Windows::UI::Core::CoreDispatcherPriority常量和优先级,Windows::UI::Core::DispatchedHandler常量和agileCallback)常量;
自动运行IDleAsync(Windows::UI::Core::IdleDispatchedHandler常量和agileCallback)常量;
};

是否有我遗漏的东西,或者这是一个bug?

这是对C++/WinRT库进行公平访问的结果。在生成的文件中使用返回类型推断将用于触发链接器错误的内容转换为编译器错误。编译器错误有以下几个原因:

  • 构建错误很早就消失了。您不必再等待编译器完成,只会在构建过程中看到链接器失败
  • 编译器可以看到源代码,并将发布导致错误的文件和行号以及类型名。相反,链接器将包含损坏的类型名称,从而导致非常嘈杂的输出
错误诊断的原因是缺少头文件的
#include
指令,该头文件包含所述类型的完整定义。识别缺少的include通常是直接的。错误消息包括丢失的类型名称,格式如下

winrt::impl::消费\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu_

相应的头文件位于
winrt
目录下,其名称是名称空间的点分隔串联,后跟
.h

在这种情况下,缺少的类型是

winrt::impl::消费\u Windows\u UI\u核心\u ICoreDispatcher

因此,您需要将包含到使用ICoreDispatcher接口的编译单元中

Raymond Chen在其名为的博客文章中提供了关于该主题的更多背景信息