Erro do compilador C3779
'function': uma função que retorna 'auto ou decltype(auto)' não pode ser usada antes de ser definida
O tipo de retorno auto
da chamada de função especificada não pôde ser deduzido. O compilador não tinha informações suficientes no site de chamada.
Comentários
Esse erro pode ocorrer quando você chama uma função de membro declarada como de encaminhamento que tem um tipo de retorno auto
, mas nenhum tipo de retorno de corpo ou à direita. Você também pode obter esse erro quando o compilador não consegue encontrar um tipo de retorno candidato ao instanciar uma especialização do modelo. Uma causa comum desse erro é um cabeçalho de interface ausente. O tipo ausente geralmente pode ser determinado a partir do nome de tipo mencionado em uma nota que se segue a esse erro. Para resolver esse problema, para cada tipo usado, inclua o cabeçalho para o namespace em que o tipo está.
Exemplos
O exemplo C++/WinRT a seguir gera 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);
}
}
Esse código relata um erro:
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
]
A observação implica que a definição de tipo de retorno depende de Windows::Foundation::Collections::IIterable
. Para resolver o problema, inclua o cabeçalho para o namespace que o contém:
// 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);
}
}
Confira também
Consumir APIs com C++/WinRT
Por que meu projeto C++/WinRT obtém erros da forma "consume_Something: a função que retorna 'auto' não pode ser usada antes de ser definida"?