작성
·
237
·
수정됨
0
#include "UObject/UObjectGlobals.h"
위의 include 문을 R1PlayerController.h 에 입력하고 나니 문제가 모두 해결되었고, 이후로는 이 include문 없이도 오류가 발생하지 않습니다.
다시 확인해보니 아래의 문제들은
UnrealHeaderTool command completed.가 되기 전에 발생하던 문제였습니다.
컴파일러 설정은
Development Editor
Win64
시작 프로젝트 -> R1 프로젝트 입니다.
환경은
언리얼 엔진은 5.5.1
vs는 17.13.1
윈도우 11 입니다.
R1.Build.cs 파일에 { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput" } 모듈들을 의존하도록 설정했습니다.
APlayerController를 상속받은 AR1PlayerController를 작성할 때 문제가 발생했었습니다.
우선 헤더에선 GENERATED_BODY() 가 작성된 줄에서 오류가 발생했었습니다.
(E0077 : 이 선언은 스토리지 클래스나 타입 지정자가 없습니다.)
그리고 cpp 파일에서 여러 오류가 존재했었습니다.
AR1PlayerController의 생성자를 작성할 때
생성자 초기자 에서 자신의 자신의 부모 클래스의 생성자를 호출하는 부분에서 오류가 발생했었습니다.
: Super(ObjectInitializer)
(E0293 : 직접적이지 않은 논버추얼 클래스는 허용되지 않습니다.)
AR1PlayerController::SetupInputComponent()
함수의 구현부에서
Super::SetupInputComponent() 에서 오류가 발생했었습니다.
(오류의 내용은 Super에 SetupInputComponent()라는 멤버가 존재하지 않는다는 오류였습니다.)
그리고
EnhancedInputComponent->BindAction()를 호출할 때
&ThisClass::(연동할 함수 이름) 에서 오류가 발생했었습니다.
(오류의 내용은 ThisClass에 (연동할 함수 이름)가 존재하지 않다는 내용이었습니다.)
코드를 한 줄씩 시험해보니 FObjectInitializer를 매개변수로 받는 R1PlayerController의 생성자가 있으니 오류가 발생한다는 것을 알았고, 생성자를 지우니 정상적으로 빌드가 되었습니다.
이어서 매개변수를 받지 않는 생성자만 작성한 경우에도 오류가 발생하지 않았습니다.
FObjectInitializer 가 존재하는 헤더 파일인 "UObject/UObjectGlobals.h"를 include 하니
FObjectInitializer를 매개변수로 받는 생성자를 작성해도 빌드가 통과되었고
이후론 해당 include문을 지워도 빌드가 통과됩니다.
.vs, Binaries, DerivedDataCache, Intermediate, Saved
폴더들을 삭제하고
.uproject 의 Generate~를 실행한 뒤 빌드 해도 문제가 발생하지 않았습니다.
제가 느끼기에는 뭔가 컴퓨터한테 "UObject/UObjectGlobals.h" 도 있으니 이것도 사용해보라고 알려주니 컴퓨터도 다음부턴 알아서 잘 이용한다는 느낌이 듭니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 이정환님.
질문 내용에서 언급한대로 #include "UObject/UObjectGlobals.h"
를 추가하고 나서 문제가 해결되었다는 부분은 매우 흥미롭습니다. 이는 C++ 코드의 컴파일러와 관련된 문제인데요, Unreal Engine의 고급 기능은 일반적으로 많은 전처리기 매크로와 함께 사용됩니다. 이러한 상황에서는 헤더 파일의 적절한 포함 여부가 중요한 역할을 합니다.
헤더 파일 포함 오류: UObject/UObjectGlobals.h
는 여러 객체 초기화 기능을 제공하는 헤더 파일입니다. INCLUDE의 순서나 파일이 포함되지 않았을 경우, 특정 기능에 접근할 수 없게 되어 오류가 발생할 수 있습니다.
GENERATED_BODY() 에러: GENERATED_BODY()
마크로가 요구하는 모든 의존성들을 제대로 인식하지 못했다면 에러가 발생할 수 있는데, 이는 관련 헤더 파일이 포함되지 않았기 때문입니다. 올바른 헤더 파일을 포함함으로써 해결되었습니다.
FObjectInitializer 사용: 이 구조체는 많은 객체 생성 기능의 초기화에 사용됩니다. 따라서 제대로 포함이 되지 않았을 경우, 매개변수로 사용할 수 없고 오류를 발생시킬 수 있습니다. UObject/UObjectGlobals.h
를 포함하여 해결되었습니다.
컴파일러 캐시: 처음에 발생하였던 오류가 포함된 헤더 덕분에 해결되었고, 이후 캐시가 제대로 저장되면서 재발하지 않는 경우도 있습니다. 캐시 폴더(.vs, Binaries 등)
를 삭제 후 여전히 오류가 발생하지 않는 건 이런 캐시 문제가 해결되었음을 시사합니다.
아래 비슷한 맥락의 이전 답변을 확인하시기 바랍니다:
- #include와 전방선언 관련 질분있습니다.
- “GENERATED_BODY() 에러 질문있습니다”
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.