Condividi tramite


Errore del compilatore C3779

'function': non è possibile usare una funzione che restituisce 'auto o decltype(auto)' prima di essere definita

Non è stato possibile dedurre il auto tipo restituito della chiamata di funzione specificata. Il compilatore non dispone di informazioni sufficienti nel sito di chiamata.

Osservazioni:

Questo errore può verificarsi quando si chiama una funzione membro dichiarata in avanti con un auto tipo restituito ma senza corpo o tipo restituito finale. È anche possibile ottenere questo errore quando il compilatore non riesce a trovare un tipo restituito candidato quando crea un'istanza di una specializzazione del modello. Una causa comune di questo errore è un'intestazione di interfaccia mancante. Il tipo mancante può spesso essere determinato dal nometipo indicato in una nota che segue questo errore. Per risolvere questo problema, per ogni tipo usato, includere l'intestazione per lo spazio dei nomi in cui si trova il tipo.

Esempi

L'esempio C++/WinRT seguente genera l'errore 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);
    }
}

Questo codice segnala un errore:

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 che la definizione del tipo restituito Windows::Foundation::Collections::IIterabledipende da . Per risolvere il problema, includere l'intestazione per lo spazio dei nomi contenitore:

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

Vedi anche

Utilizzare API con C++/WinRT
Perché il progetto C++/WinRT riceve errori nel formato "consume_Something: la funzione che restituisce 'auto' non può essere usata prima di essere definita"?