Error del compilador C3779
"function": no se puede usar una función que devuelve "auto or decltype(auto)" antes de que esté definida
No se pudo deducir el tipo de valor devuelto auto
de la llamada a función especificada. El compilador no tenía información suficiente en el sitio de llamada.
Comentarios
Este error se puede producir cuando se llama a una función miembro declarada por adelantado que tiene un tipo de valor devuelto auto
, pero ningún tipo de valor devuelto final o de cuerpo. También puede recibir este error cuando el compilador no encuentra un tipo de valor devuelto candidato al crear una instancia de una especialización de plantilla. Una causa común de este error es un encabezado de interfaz que falta. Por lo general, el tipo que falta se puede determinar a partir del nombre de tipo que se menciona en una nota que aparece después de este error. A fin de resolver este problema, para cada tipo que use, incluya el encabezado del espacio de nombres en el que se encuentra el tipo.
Ejemplos
El ejemplo de C++/WinRT siguiente genera el error 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);
}
}
Este código notifica un error:
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 nota implica que la definición del tipo de valor devuelto depende de Windows::Foundation::Collections::IIterable
. Para resolver el problema, incluya el encabezado de su espacio de nombres contenedor:
// 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);
}
}
Consulte también
Consumir API con C++/WinRT
¿Por qué mi proyecto de C++/WinRT recibe errores con el formato "consume_Something: no se puede usar la función que devuelve "auto" antes de definirla"?