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::IIterable
de . 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 » ?