컴파일러 오류 C3779
'function': 'auto 또는 decltype(auto)'을 반환하는 함수는 정의되기 전에 사용할 수 없습니다.
auto
지정된 함수 호출의 반환 형식을 추론할 수 없습니다. 컴파일러에 호출 사이트에 충분한 정보가 없습니다.
설명
이 오류는 반환 형식이 있지만 본문 또는 후행 반환 형식이 auto
없는 정방향 선언 멤버 함수를 호출할 때 발생할 수 있습니다. 템플릿 특수화를 인스턴스화할 때 컴파일러가 후보 반환 형식을 찾을 수 없는 경우에도 이 오류가 발생할 수 있습니다. 이 오류의 일반적인 원인은 누락된 인터페이스 헤더입니다. 누락된 형식은 종종 이 오류 다음에 오는 메모에 언급된 형식 이름에서 확인할 수 있습니다. 이 문제를 해결하려면 사용하는 모든 형식에 대해 형식이 있는 네임스페이스의 헤더를 포함합니다.
예제
다음 C++/WinRT 샘플에서는 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);
}
}
이 코드는 오류를 보고합니다.
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
]
참고는 반환 형식 정의가 .에 Windows::Foundation::Collections::IIterable
의존한다는 것을 의미합니다. 이 문제를 해결하려면 포함된 네임스페이스의 헤더를 포함합니다.
// 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);
}
}
참고 항목
C++/WinRT를 통한 API 사용
C++/WinRT 프로젝트에서 "consume_Something: 'auto'를 반환하는 함수를 정의하기 전에 사용할 수 없음" 형식의 오류가 발생하는 이유는 무엇인가요?