WinRT/C++ 오류 'auto'을(를) 반환하는 함수를 정의되기 전에 사용할 수 없습니다.
원인
필요한 헤더파일이 안불러와진 것..
문제
WinRT로 프로그램을 만드는 중에.. 어떤 오류가 발생했다..
심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
오류 C3779 'winrt::impl::consume_Windows_UI_Input_IPointerPoint<winrt::Windows::UI::Input::IPointerPoint>::Position': 'auto'을(를) 반환하는 함수를 정의되기 전에 사용할 수 없습니다. ScaraGUIController C:\Users\PKDPMS0328\source\repos\ScaraGUIController\ScaraGUIController\MainPage.cpp 22
이 오류는 WinRT 부분에서만 일어나는 오류 같은데.. 블로그나 해결 방법은 잘 안나와 있어서.. 일단 마이크로소프트 문서에 검색해보니..
https://learn.microsoft.com/ko-kr/cpp/error-messages/compiler-errors-2/compiler-error-c3779
컴파일러 오류 C3779
자세한 정보: 컴파일러 오류 C3779
learn.microsoft.com
해결 방법은 다행히 있었다..!
해결방법
어쨋든 내 코드의 경우
#include <winrt/Windows.UI.Xaml.Input.h>
void function(winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e) {
winrt::Windows::UI::Input::PointerPoint point = e.GetCurrentPoint(ControlJoint());
Point_X().Text(winrt::to_hstring(point.Position().X));
Point_Y().Text(winrt::to_hstring(point.Position().Y));
}
대충 이런식의 코드인데.. 여기에서 오류가 난 부분은 point.Position().X 저쪽 부분이다..
여기에서 문제의 저 오류에 winrt::Windows::UI::Input::IPointerPoint 이런게 뭐가 문제가 있다면서 알려주는데
이것을 헤더파일에 추가하면 문제가 해결되는 것이였다..!
그래서 나의 경우에는 IPointerPoint는 Input 헤더 안에 있는 것이기 때문에
#include <winrt/Windows.UI.Input.h> 이 코드로 헤더파일을 추가해서 해결했다..!
#include <winrt/Windows.UI.Xaml.Input.h>
#include <winrt/Windows.UI.Input.h> // 오류 해결에 필요한 헤더파일
void function(winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e) {
winrt::Windows::UI::Input::PointerPoint point = e.GetCurrentPoint(ControlJoint());
Point_X().Text(winrt::to_hstring(point.Position().X));
Point_Y().Text(winrt::to_hstring(point.Position().Y));
}
결론
'winrt::impl::consume_Windows_UI_Input_IPointerPoint<winrt::Windows::UI::Input::IPointerPoint>::Position': 'auto'을(를) 반환하는 함수를 정의되기 전에 사용할 수 없습니다.
이런식으로 오류가 뜰 경우
1. <winrt::Windows::UI::Input::IPointerPoint> 부분이 자신의 오류에서 뭐인지 찾는다.
2. winrt::Windows::UI::Input::IPointerPoint 이것에 해당하는 헤더파일을 찾는다. 보통은 맨 뒤에꺼 지운게 아마 헤더파일일 꺼다.. winrt::Windows::UI::Input 여기까지, 그리고 헤더파일로 할 경우 winrt/Windows.UI.Input.h
3. 찾은 헤더파일을 추가해서 문제를 해결한다!!!!
근데.. 애초에 Input::PointerPoint가 필요한 헤더파일이 winrt/Windows.UI.Input.h였다.. winrt/Windows.UI.Xaml.Input.h가 아닌... 그냥.. 필요한 헤더파일을 안불러왔었던 것..