Teilen über


Compilerfehler C3779

'function': Eine Funktion, die "auto oder decltype(auto)" zurückgibt, kann nicht verwendet werden, bevor sie definiert wird.

Hinweise

Der auto Rückgabetyp des angegebenen Funktionsaufrufs konnte nicht abgeleitet werden. Der Compiler hat nicht genügend Informationen auf der Aufrufwebsite.

Dieser Fehler kann auftreten, wenn Sie eine forward-deklarierte Memberfunktion aufrufen, die einen auto Rückgabetyp, aber keinen Textkörper oder nachfolgende Rückgabetyp aufweist. Sie können diesen Fehler auch erhalten, wenn der Compiler keinen Kandidaten-Rückgabetyp finden kann, wenn er eine Vorlagenspezialisierung instanziiert. Eine häufige Ursache für diesen Fehler ist ein fehlender Schnittstellenheader. Der fehlende Typ kann häufig anhand des in einer Notiz erwähnten Typs bestimmt werden, der auf diesen Fehler folgt. Um dieses Problem zu beheben, fügen Sie für jeden verwendeten Typ den Header für den Namespace ein, in dem sich der Typ befindet.

Example

Im folgenden C++/WinRT-Beispiel wird C3779 generiert:

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

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

Dieser Code meldet einen Fehler:

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
]

Die Notiz impliziert, dass die Rückgabetypdefinition von Windows::Foundation::Collections::IIterable. Um das Problem zu beheben, schließen Sie den Header für den enthaltenden Namespace ein:

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

Siehe auch

Verwenden von APIs mit C++/WinRT
Warum erhält mein C++/WinRT-Projekt Fehler des Formulars "consume_Something: Funktion, die 'auto' zurückgibt, kann nicht verwendet werden, bevor es definiert wird"?