使用winrt :: implements和winrt :: make时出错

问题描述

在C ++ / WinRT中,我手工编写了一些这样的类(不使用idls):

class GenericController: public winrt::Windows::Foundation::IInspectable {
...
}

class BackgroundController1: public winrt::implements<BackgroundController1,GenericController> {
...
}

然后我创建这样的对象:

auto controller = winrt::make<BackgroundController1>();

对于从winrt:implements 派生的每个类,我都会遇到以下错误

Error   C3668   'winrt::impl::produce_base<D,I,void>::QueryInterface': method with override specifier 'override' did not override any base class methods    C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt\winrt\base.h   8016    
Error   C3668   'winrt::impl::produce_base<D,void>::AddRef': method with override specifier 'override' did not override any base class methods    C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt\winrt\base.h   8021    
Error   C3668   'winrt::impl::produce_base<D,void>::Release': method with override specifier 'override' did not override any base class methods   C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt\winrt\base.h   8026    
Error   C3668   'winrt::impl::produce_base<D,void>::GetIids': method with override specifier 'override' did not override any base class methods   C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt\winrt\base.h   8031    
Error   C3668   'winrt::impl::produce_base<D,void>::GetRuntimeClassName': method with override specifier 'override' did not override any base class methods   C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt\winrt\base.h   8036    
Error   C3609   'winrt::impl::produce_base<D,void>::GetTrustLevel': a 'final' function must be virtual    C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt\winrt\base.h   8041    
Error   C2440   'initializing': cannot convert from 'initializer list' to 'GenericController' (compiling source file C:\Users\...\BackgroundController1.cpp)    C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt\winrt\base.h   8814    

这是输出日志:

error C3668: 'winrt::impl::produce_base<D,void>::QueryInterface': method with override specifier 'override' did not override any base class methods
1>        with
1>        [
1>            D=`anonymous-namespace'::BackgroundController1,1>            I=GenericController
1>        ]
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt\winrt/base.h(7737): note: see reference to class template instantiation 'winrt::impl::produce_base<D,void>' being compiled
1>        with
1>        [
1>            D=`anonymous-namespace'::BackgroundController1,1>            I=GenericController
1>        ]
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt\winrt/base.h(8005): note: see reference to class template instantiation 'winrt::impl::produce<D,I>' being compiled
1>        with
1>        [
1>            D=`anonymous-namespace'::BackgroundController1,1>            I=GenericController
1>        ]
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt\winrt/base.h(7685): note: see reference to class template instantiation 'winrt::impl::producer<D,GenericController,void>' being compiled
1>        with
1>        [
1>            D=`anonymous-namespace'::BackgroundController1
1>        ]
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt\winrt/base.h(8829): note: see reference to class template instantiation 'winrt::impl::producers_base<D,std::tuple<GenericController>>' being compiled
1>        with
1>        [
1>            D=`anonymous-namespace'::BackgroundController1
1>        ]
1>note: see reference to class template instantiation 'winrt::implements<`anonymous-namespace'::BackgroundController1,GenericController>' being compiled
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt\winrt/base.h(10615): note: see reference to class template instantiation 'winrt::com_ptr<winrt::impl::IContextCallback>' being compiled
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt\winrt/base.h(10349): note: see reference to class template instantiation 'winrt::com_ptr<winrt::impl::IServerSecurity>' being compiled
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt\winrt/base.h(10308): note: see reference to class template instantiation 'std::chrono::time_point<winrt::clock,winrt::Windows::Foundation::TimeSpan>' being compiled 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt\winrt/base.h(6462): note: see reference to class template instantiation 'winrt::com_ptr<winrt::impl::IMarshal>' being compiled 
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt\winrt/base.h(210): note: see reference to class template instantiation 'std::array<uint8_t,8>' being compiled 

看起来类的编写方式和对象的创建方式可能有问题。但是我无法弄清楚是什么或为什么。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)