언리얼엔진 c++ 질문 있습니다.
글쓴이: lalupo20 / 작성시간: 목, 2024/11/21 - 10:50오후
class FIRSTCPP_API AABPawn : public APawn { GENERATED_BODY() public: // Sets default values for this pawn's properties AABPawn(); protected: // Called when the game starts or when spawned virtual void BeginPlay() override; public: // Called every frame virtual void Tick(float DeltaTime) override; virtual void PostInitializeComponents() override; virtual void PossessedBy(AController* newController) override; // Called to bind functionality to input virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; UPROPERTY(VisibleAnywhere, Category = Collison) UCapsuleComponent* capsule; UPROPERTY(VisibleAnywhere, Category = Visual) USkeletalMeshComponent* mesh; UPROPERTY(VisibleAnywhere, Category = Movement) UFloatingPawnMovement* movement; UPROPERTY(VisibleAnywhere, Category = Camera) USpringArmComponent* springArm; UPROPERTY(VisibleAnywhere, Category = Camera) UCameraComponent* camera; };
클래스 선언 부분이구요
AABPawn::AABPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; capsule = CreateDefaultSubobject<UCapsuleComponent>(TEXT("CAPSULE")); mesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("MESH")); movement = CreateDefaultSubobject<UFloatingPawnMovement>(TEXT("MOVEMENT")); springArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SPRINGARM")); camera = CreateDefaultSubobject<UCameraComponent>(TEXT("CAMERA")); RootComponent = capsule; mesh->SetupAttachment(capsule); springArm->SetupAttachment(capsule); camera->SetupAttachment(springArm); }
생성자 부분입니다.
위 클래스 선언부분을 보면 UCapusleComponent 객체변수가 선언되어 있는데
생성자 부분에서 RootComponent부분에 capsule 객체를 대입해주는 부분에서
빨간줄이 그어집니다.
위와 같은 문제를
"Components/CapsuleComponent.h" 헤더파일을 추가하는것으로 해결했는데요.
헤더파일이 없어서 안되는거면 처음에 객체 변수 선언할때부터 안되야 되는거 아닌가요?
너무 기초적인 질문인지...
잘 모르겠어서 여쭤봅니다.
Forums:
코드가 불완전해서 확신하긴 어렵지만
1. 헤더파일에는
UCapsuleComponent
타입에 대한 전방 선언 (Forward declaration)이 되어 있을 수 있습니다.전방 선언만 되어 있으면 그 타입의 포인터를 만들 수 있습니다.
2.
RootComponent = capsule;
에서는 전방 선언만으로는 불충분했을 것입니다.아마 상속 관계 같은 정보가 필요했겠죠.
RootComponent
가UCapsuleComponent
의 base 타입에 대한 포인터라던가?그러면 전방 선언만으로는 안 되고
UCapsuleComponent
타입의 정의를 포함하는 헤더 파일을 포함시켜야 하는 것입니다.댓글감사드립니다!
이해가 잘되네용
댓글 달기