Erreur du compilateur C3779

'function' : une fonction qui retourne 'auto ou decltype(auto)' ne peut pas être utilisée avant qu’elle soit définie

Le auto type de retour de l’appel de fonction spécifié n’a pas pu être déduit. Le compilateur n’a pas suffisamment d’informations sur le site d’appel.

Notes

Cette erreur peut se produire lorsque vous appelez une fonction membre déclarée par transfert qui a un auto type de retour, mais aucun corps ni type de retour de fin. Vous pouvez également obtenir cette erreur lorsque le compilateur ne trouve pas de type de retour candidat lorsqu’il instancie une spécialisation de modèle. Une cause courante de cette erreur est un en-tête d’interface manquant. Le type manquant peut souvent être déterminé à partir du nom de type mentionné dans une note qui suit cette erreur. Pour résoudre ce problème, pour chaque type que vous utilisez, incluez l’en-tête de l’espace de noms dans lequel se trouve le type.

Exemples

L’exemple C++/WinRT suivant génère l’erreur C3779 :

// C3779.cpp
#include <winrt/Windows.Gaming.Input.h>

void CheckGamepads()
{
    auto gamepads =
        winrt::Windows::Gaming::Input::Gamepad::Gamepads();
    for (auto&& gamepad : gamepads)
    {
        check(gamepad);
    }
}

Ce code signale une erreur :

C3779.cpp(8): error C3779: winrt::impl::consume_Windows_Foundation_Collections_IIterable<D,winrt::Windows::Gaming::Input::Gamepad>::First': a function that returns 'auto' cannot be used before it is defined
with
[
    D=winrt:::Windows:::Gaming:::Input:::Gamepad
]
note: see declaration of 'winrt::impl::consume_Windows_Foundation_Collections_IIterable<D,winrt::Windows::Gaming::Input::Gamepad>::First'
with
[
    D=winrt::Windows::Gaming::Input::IVisualCollection
]

La note implique que la définition du type de retour dépend Windows::Foundation::Collections::IIterablede . Pour résoudre le problème, incluez l’en-tête de son espace de noms contenant :

// C3779b.cpp
#include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.Gaming.Input.h>

void CheckGamepads()
{
    auto gamepads =
        winrt::Windows::Gaming::Input::Gamepad::Gamepads();
    for (auto&& gamepad : gamepads)
    {
        check(gamepad);
    }
}

Voir aussi

Utiliser des API avec C++/WinRT
Pourquoi mon projet C++/WinRT obtient-il des erreurs de la forme « consume_Something : fonction qui retourne « auto » ne peut-elle pas être utilisée avant qu’elle soit définie » ?