Megosztás a következőn keresztül:


C3779 fordítási hiba

"függvény": az "auto vagy decltype(auto)" értéket visszaadó függvény nem használható a definiálás előtt

Megjegyzések

A auto megadott függvényhívás visszatérési típusa nem következtethető ki. A fordítónak nem volt elegendő információja a hívási helyen.

Ez a hiba akkor fordulhat elő, ha egy előre deklarált tagfüggvényt hív meg, amelynek van auto visszatérési típusa, de nincs hozzá tartozó törzs vagy késleltetett visszatérési típus. Ez a hiba akkor is jelentkezik, ha a fordító nem talál egy jelölt visszatérési típust, amikor létrehoz egy sablon specializációt. A hiba gyakori oka egy hiányzó felületi fejléc. A hiányzó típust gyakran a hibát követő megjegyzésben említett típusnév alapján lehet meghatározni. A probléma megoldásához minden használt típushoz adja meg annak a névtérnek a fejlécét, amelyben a típus szerepel.

Example

A következő C++/WinRT-példa C3779-et hoz létre:

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

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

Ez a kód hibát jelez:

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 megjegyzés azt jelzi, hogy a visszatérési típus definíciója a függvénytől Windows::Foundation::Collections::IIterablefügg. A probléma megoldásához adja meg a névtér fejlécét:

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

Lásd még

API-k használata C++/WinRT használatával
Miért jelenik meg a C++/WinRT projektemben olyan hiba, hogy "consume_Something: az 'auto' értéket visszaadó függvény nem használható, mielőtt definiálva van"?