[Unreal] 언리얼 엔진에서 구조체를 사용할 때
2023. 2. 22. 05:01ㆍUnreal-Engine 개발기
언리얼엔진에서 USTRUCT를 사용하다 독특한 에러를 만났다.
C++ 파일을 사용할 때 컴파일 의존성을 최소화 시키기 위해서 헤더파일에서는 class 또는 struct 키워드를 사용하거나 전방선언을 사용하는데 컴파일 에러를 만났다.
UFUNCTION()
void SpawnPiece(const TSubclassOf<class AChessPiece> piece, const struct FChessDataRow* Row);
다음과 같은 모양으로 함수를 선언했는데 컴파일러가 뒤쪽의 struct 부분에서 아래와 같은 에러를 날렸다.
원래 구조체가 포인터를 이용한 방식이 안되나 싶어서 직접 테스트를 해보았다.
//actor.h
#pragma once
class actor
{
private:
public:
actor();
void do_with_struct(const struct t_test* t);
void do_with_class(const class c_test* c);
};
당연하게도 너무 컴파일이 잘 되었다.
찾아보니 언리얼 엔진의 고유 문제였다. 언리얼 엔진에서는 구조체를 사용할 때 위와 같은 방식을 제한하고 있다.
더 자세한 내용이 궁금해서 Chat GPT에게 질문해 언리얼 엔진이 어떤 식으로 처리를 하는지 알 수 있었다.
결론만 보면 언리얼 엔진에서 내부적으로 구조체를 값 형식으로 처리하기 때문에 포인터의 형태로 사용이 불가능 한 거였다.
컴파일 의존성이 늘어나는 것은 어쩔 수 없지만 폴더를 쪼개거나 아니면 한정되는 구조체는 클래스와 함께 놔두는 것이 더 나을 것 같다
'Unreal-Engine 개발기' 카테고리의 다른 글
언리얼 엔진 간단 팁 모음 (0) | 2024.12.16 |
---|---|
[Unreal Engine] Linux CrossCompile - Missing precompiled manifest 에러 해결 (0) | 2024.07.31 |
[UEChess] 언리얼, 블렌더를 이용한 3D체스 만들기 3. 데이터 테이블을 이용해 체스피스 스폰 장소 및 정보 특정하기 (0) | 2023.02.21 |
[UEChess] 언리얼, 블렌더를 이용한 3D체스 만들기 2. 블렌더를 이용해 체스 보드 만들기 (0) | 2023.02.16 |
[UEChess] 언리얼, 블렌더를 이용한 3D체스 만들기 1. 시작 - 프로젝트 세팅 및 기본 구조 잡기 (0) | 2023.02.16 |