Delen via


Compilerfout C3779

'functie': een functie die 'auto of decltype(auto)' retourneert, kan niet worden gebruikt voordat deze is gedefinieerd

Opmerkingen

Het auto retourtype van de opgegeven functieaanroep kan niet worden afgeleid. De compiler heeft onvoldoende informatie bij de aanroepplaats.

Deze fout kan optreden wanneer u een vooraf gedeclareerde lidfunctie aanroept met een auto retourtype, maar geen implementatie of afgeleid retourtype. U kunt deze fout ook krijgen wanneer de compiler geen kandidaat retourtype kan vinden wanneer er een sjabloonspecialisatie wordt geïnstitueert. Een veelvoorkomende oorzaak van deze fout is een ontbrekende interfaceheader. Het ontbrekende type kan vaak worden bepaald op basis van de typenaam die wordt vermeld in een opmerking die volgt op deze fout. U kunt dit probleem oplossen door voor elk type dat u gebruikt, de header voor de naamruimte op te nemen waarin het type zich bevindt.

Example

In het volgende C++/WinRT-voorbeeld wordt C3779 gegenereerd:

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

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

Met deze code wordt een fout gerapporteerd:

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
]

De opmerking impliceert dat de definitie van het retourtype afhangt van Windows::Foundation::Collections::IIterable. U kunt het probleem oplossen door de header voor de naamruimte op te nemen:

// 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);
    }
}

Zie ook

API's gebruiken met C++/WinRT
Waarom krijgt mijn C++/WinRT-project fouten van het formulier 'consume_Something: functie die automatisch retourneert, kan niet worden gebruikt voordat deze is gedefinieerd'?