신입 게임 개발자의 프로그래밍 일기
[Unreal Engine 4]이득우의 언리얼 C++ 게임 개발의 정석 - 코드 11_10 issue 본문
[게시글 수정 내역]
2020-06-30
- 1. 전방선언필요 -> 타입 선언 필요로 수정
이 문제를 해결하는 방법에는 전방선언(Forward Declaration)과 Elaborated type specifier로 해결 가능
기존 코드들과 유사하도록 게시글에서는 Elaborated type specifier로 해결하였다.
(게시글과 같은 코드를 stackoveflow C++ 개발자들은 Elaborated type specifier라고 부르고,
Unreal Engine 포럼 개발자들은 inline forward declaration이라고도 부르는 것 같다.)
- 본 게시글과 유사한 형태의 stackoverflow 글
참고2: https://stackoverflow.com/questions/28007165/class-keyword-in-variable-definition-in-c
- 'The C++ standard doesn't use the terms "forward declaration" or "inline forward declaration". (이하 생략)'라는 댓글 덕분에 오랜만에 C++ Standard를 다시 찾아보게 됨...
2020-06-29
- 게시글 게시
--------------------------------------------------------------------------------------------
도서 '이득우의 언리얼 C++ 게임 개발의 정석' 코드 11-10 작성 중 발생한 이슈
도서를 공부하다 보니 문제가 발생했다.
도서는 언리얼 엔진 4.19를 기준으로 코드를 작성되어 있고
나는 4.24 버전으로 작업해서 발생한 문제인지는 모르겠으나...
(버전 문제는 아닌 거 같은데... 흠)
뭐 아무튼...
해결 코드는 다음과 같다.
ABCharacterStatComponent.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "Unreal_Book.h"
#include "Components/ActorComponent.h"
#include "ABCharacterStatComponent.generated.h"
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class UNREAL_BOOK_API UABCharacterStatComponent : public UActorComponent
{
GENERATED_BODY()
public:
// Sets default values for this component's properties
UABCharacterStatComponent();
protected:
// Called when the game starts
virtual void BeginPlay() override;
virtual void InitializeComponent() override;
public:
void SetNewLevel(int32 NewLevel);
private:
// 도서 코드에서 발생한 문제
//1. 타입 선언 필요 (수정 전에는 전방 선언 필요라고 적음)
//2. 초기화 코드는 cpp
//static FABCharacterData* CurrentStatData = nullptr;
static struct FABCharacterData* CurrentStatData; // 수정 코드
UPROPERTY(EditInstanceOnly, Category = Stat, Meta = (AllowPrivateAccess = true))
int32 Level;
UPROPERTY(EditInstanceOnly, Category = Stat, Meta = (AllowPrivateAccess = true))
float CurrentHp;
public:
// Called every frame
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
};
ABCharacterStatComponent.cpp 일부분
#include "ABCharacterStatComponent.h"
#include "ABGameInstance.h"
// 초기화 코드
FABCharacterData* UABCharacterStatComponent::CurrentStatData = nullptr;
이상으로 글 작성 종료!
[잡담]
그런데 tistory 코드블록 기능 괜찮네요
감사합니다 tistory 개발자분들~
'GameProgramming' 카테고리의 다른 글
[게임에서의 길찾기] 다익스트라(Dijkstra) (0) | 2020.12.11 |
---|---|
[게임에서의 길찾기] DFS(Depth-First Search) (0) | 2020.12.01 |
[게임에서의 길찾기] BFS(Breath-First Search) (0) | 2020.12.01 |
[Direct3D9] Hardware Skinning 공부 중 - ID3DXMesh::CloneMeshFVF now fails for meshes with D3DFVF_XYZRHW (1) | 2020.08.05 |