강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

이정환님의 프로필 이미지
이정환

작성한 질문수

[입문자를 위한 UE5] Part4. 언리얼 엔진 C++

Input

언리얼 시스템의 에러? 에 대해서 질문 드립니다.

작성

·

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의 고급 기능은 일반적으로 많은 전처리기 매크로와 함께 사용됩니다. 이러한 상황에서는 헤더 파일의 적절한 포함 여부가 중요한 역할을 합니다.

요약 설명 및 해결 과정

  1. 헤더 파일 포함 오류: UObject/UObjectGlobals.h는 여러 객체 초기화 기능을 제공하는 헤더 파일입니다. INCLUDE의 순서나 파일이 포함되지 않았을 경우, 특정 기능에 접근할 수 없게 되어 오류가 발생할 수 있습니다.

  2. GENERATED_BODY() 에러: GENERATED_BODY() 마크로가 요구하는 모든 의존성들을 제대로 인식하지 못했다면 에러가 발생할 수 있는데, 이는 관련 헤더 파일이 포함되지 않았기 때문입니다. 올바른 헤더 파일을 포함함으로써 해결되었습니다.

  3. FObjectInitializer 사용: 이 구조체는 많은 객체 생성 기능의 초기화에 사용됩니다. 따라서 제대로 포함이 되지 않았을 경우, 매개변수로 사용할 수 없고 오류를 발생시킬 수 있습니다. UObject/UObjectGlobals.h를 포함하여 해결되었습니다.

  4. 컴파일러 캐시: 처음에 발생하였던 오류가 포함된 헤더 덕분에 해결되었고, 이후 캐시가 제대로 저장되면서 재발하지 않는 경우도 있습니다. 캐시 폴더(.vs, Binaries 등)를 삭제 후 여전히 오류가 발생하지 않는 건 이런 캐시 문제가 해결되었음을 시사합니다.

아래 비슷한 맥락의 이전 답변을 확인하시기 바랍니다:
- #include와 전방선언 관련 질분있습니다.
- “GENERATED_BODY() 에러 질문있습니다”

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이정환님의 프로필 이미지
이정환

작성한 질문수

질문하기