Почему я получаю C3646 в объявлении IAsyncAction?

Возможно, глупый вопрос (нуб WinRT), но вот...

Код из "App.xaml.h":

      namespace winrt::Precog::implementation
{
    struct App : AppT<App>
    {
        App();

        void OnLaunched(Microsoft::UI::Xaml::LaunchActivatedEventArgs const&);

    private:
        std::wstring cfgDatabase = L"";
        winrt::Microsoft::UI::Xaml::Window window{ nullptr };

        IAsyncAction loadSettings();
    };
}

Когда я пытаюсь скомпилировать, Visual Studio выдает мне C3646 (неизвестный спецификатор переопределения) в объявлении IAsyncAction?

Реализация loadSettings:

      IAsyncAction App::loadSettings()
{
    PHKEY regKey = NULL;
    LSTATUS regResult;

    regResult = RegCreateKey(HKEY_CURRENT_USER, L"Precog", regKey);
    if (regResult != ERROR_SUCCESS)
    {
        ContentDialog errorDialog = ContentDialog();
        errorDialog.Title(box_value(L"Erro"));
        errorDialog.Content(box_value(L"Pateta"));
        errorDialog.CloseButtonText(L"Ok");
        errorDialog.XamlRoot(window.Content().XamlRoot());
        auto result = co_await errorDialog.ShowAsync();
    }
    else
    {
        co_return;
    }
}

РЕДАКТИРОВАТЬ: Полный вывод компилятора:

      Build started...
1>------ Build started: Project: Precog, Configuration: Debug x64 ------
1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2304,5): warning MSB3106: Assembly strong name "C:\Code\Precog\packages\Microsoft.WindowsAppSDK.1.0.0\build\native\..\..\lib\uap10.0\Microsoft.Windows.System.winmd" is either a path which could not be found or it is a full assembly name which is badly formed. If it is a full assembly name it may contain characters that need to be escaped with backslash(\). Those characters are Equals(=), Comma(,), Quote("), Apostrophe('), Backslash(\).
1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2304,5): warning MSB3106: Assembly strong name "C:\Code\Precog\packages\Microsoft.WindowsAppSDK.1.0.0\build\native\..\..\lib\uap10.0\Microsoft.Windows.PushNotifications.winmd" is either a path which could not be found or it is a full assembly name which is badly formed. If it is a full assembly name it may contain characters that need to be escaped with backslash(\). Those characters are Equals(=), Comma(,), Quote("), Apostrophe('), Backslash(\).
1>App.xaml.cpp
1>C:\Code\Precog\Precog\Precog\App.xaml.h(17,22): error C3646: 'loadSettings': unknown override specifier
1>C:\Code\Precog\Precog\Precog\App.xaml.h(17,34): error C2059: syntax error: '('
1>C:\Code\Precog\Precog\Precog\App.xaml.h(17,36): error C2238: unexpected token(s) preceding ';'
1>C:\Code\Precog\Precog\Precog\App.xaml.cpp(35,19): error C2039: 'loadSettings': is not a member of 'winrt::Precog::implementation::App'
1>C:\Code\Precog\Precog\Precog\App.xaml.h(7): message : see declaration of 'winrt::Precog::implementation::App'
1>C:\Code\Precog\Precog\Precog\App.xaml.cpp(48,30): error C2065: 'window': undeclared identifier
1>Done building project "Precog.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

1 ответ

Понятно. Казалось, что это несоответствие пространства имен, так как объявление было изменено на:

      winrt::Windows::Foundation::IAsyncAction loadSettings();

Решил проблему. Интересно, что Intellisense не улавливает ошибку (нет красной линии под типом), это делает только компилятор.

Другие вопросы по тегам