UE_LOG에 빨간 밑줄이 생겨요.
1943
작성한 질문수 1
h
#pragma once
#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "MyGameInstance.generated.h"
UCLASS()
class ABC_API UMyGameInstance : public UGameInstance
{
GENERATED_BODY()
public:
virtual void Init() override;
private:
};
cpp
#include "MyGameInstance.h"
void UMyGameInstance::Init()
{
Super::Init();
TCHAR LogCharArray[]= TEXT("Hello Unreal");
UE_LOG(LogTemp, Log, LogCharArray);
}
인데 UE_LOG에 밑줄 생기고 실행이 안됩니다.
답변 2
2
배열을 넘기려는 경우 const로 선언해주셔야 합니다.
0
#include "MyGameInstance.h"
void UMyGameInstance::Init()
{
Super::Init();
TCHAR LogCharArray[]= TEXT("Hello Unreal");
UE_LOG(LogTemp, Log, LogCharArray);
}
TCHAR LogCharArray[] 앞에
const를 넣어도 문제해결이 안돼서
TCHAR LogCharArray[] 앞에
static const를 넣어줘야 UE_LOG에 빨간 밑줄이 사라집니다.
강의와 다르게 실행되는 이유를 알려주시면 감사하겠습니다.
7
헛.. UE_LOG가 버전마다 매크로 선언이 조금씩 다르네요.
어제는 깃헙소스만 보고 답변드렸었는데, 지금 직접 살펴보니 5.1의 UE_LOG의 내부는 아래와 같이 선언되어 있고 TCHAR 배열을 받고 에러도 안나네요.
#define UE_INTERNAL_LOG_IMPL(CategoryName, Verbosity, Format, ...) \
static_assert(TIsArrayOrRefOfTypeByPredicate<decltype(Format), TIsCharEncodingCompatibleWithTCHAR>::Value, "Formatting string must be a TCHAR array."); \
static_assert((ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask) < ELogVerbosity::NumVerbosity && ELogVerbosity::Verbosity > 0, "Verbosity must be constant and in range."); \
UE_LOG_EXPAND_IS_FATAL(Verbosity, PREPROCESSOR_NOTHING, if (!CategoryName.IsSuppressed(ELogVerbosity::Verbosity))) \
{ \
UE_VALIDATE_FORMAT_STRING(Format, ##__VA_ARGS__); \
DispatchCheckVerify([] (const auto& LCategoryName, const auto& LFormat, const auto&... UE_LOG_Args) UE_DEBUG_SECTION \
{ \
TRACE_LOG_MESSAGE(LCategoryName, Verbosity, LFormat, UE_LOG_Args...) \
UE_LOG_EXPAND_IS_FATAL(Verbosity, \
{ \
FMsg::Logf_Internal(UE_LOG_SOURCE_FILE(__FILE__), LINE, LCategoryName.GetCategoryName(), ELogVerbosity::Verbosity, LFormat, UE_LOG_Args...); \
UE_DEBUG_BREAK_AND_PROMPT_FOR_REMOTE(); \
FDebug::ProcessFatalError(PLATFORM_RETURN_ADDRESS()); \
}, \
{ \
FMsg::Logf_Internal(nullptr, 0, LCategoryName.GetCategoryName(), ELogVerbosity::Verbosity, LFormat, UE_LOG_Args...); \
} \
) \
}, CategoryName, Format, ##__VA_ARGS__); \
UE_LOG_EXPAND_IS_FATAL(Verbosity, CA_ASSUME(false);, PREPROCESSOR_NOTHING) \
} \그런데 5.2버젼의 UE_LOG 매크로의 내부는 다르게 선언되어 있네요.
강의는 5.1버전으로 진행해주시면 되겠습니다.
/** Private macro used to implement the public log macros. DO NOT CALL DIRECTLY! */
#define UE_PRIVATE_LOG(Condition, CategoryConst, Category, Verbosity, Format, ...) \
{ \
static_assert(std::is_const_v<std::remove_reference_t<decltype(Format)>>, "Formatting string must be a const TCHAR array."); \
0
지금 5.3으로 사용하고 있는데 TCHAR 로 텍스트 변수 선언할 때 "TCHAR" 앞에 "static const"를 입력해서 선언하면 문제 없이 사용 됩니다. 이유는 모르겠는데 작동은 되네요. 혹시 이에 대한 자세한 설명도 부탁 드려도 될까요?
0
static const TCHAR LogCharArray[] = TEXT("Hello Unreal");방식은LogCharArray변수를 함수 범위 내에서만 유지하고 값을 변경할 수 없도록 지정합니다.TCHAR배열과const키워드는UE_LOG매크로의 요구 사항을 충족시킵니다.TEXT매크로는 명확성을 위해 사용됩니다.
음...
5.1이후로는 UE_LOG 대신 GEngine->AddOnScreenDebugMessage를 권장 하고 있다네요
그리고 UE_LOG 방식 외에도//5.3 // TEXT 매크로 사용하여 해결 UE_LOG(LogTemp, Log, TEXT("Hello Unreal")); // FString 객체 사용하여 해결 FString LogString = TEXT("Hello Unreal"); UE_LOG(LogTemp, Log, LogString);
0
추가로 GEngine 사용
void UMyGameInstance::Init()
{
Super::Init();
// FString 객체 사용
FString LogString = TEXT("Hello Unreal");
// GEngine->AddOnScreenDebugMessage 함수 사용
GEngine->AddOnScreenDebugMessage(
0, // Unique message ID (optional)
5.0f, // Message duration in seconds
FColor::Green, // Message color
LogString // Message text
);
}
저는 저 노란색 미리보기 창이 안뜹니다
0
21
1
강의중에 사용하는 ppt 수업 자료
0
37
1
GetName(), SetName() 함수의 오버로딩 관련 문제 문의드립니다.
0
40
1
언리얼 공부 방법에 대해서 질문드립니다.
0
72
1
컴포지션을 위한 컴포넌트 생성에 관해 질문드립니다.
0
83
2
if (NameProp) 은 if (NameProp != nullptr)이랑 같은 의미인가요?
0
96
2
언리얼 계정 로그인 불가 문제
0
117
2
가비지컬렉션 주기를 짧게 유지하면 어떤 이슈가있을까요?
0
75
2
11강 TArray TSet 에 대해서 질문있습니다.
0
72
1
Unreal 연동 후 Visual Studio 빌드오류 제발 살려주십쇼
0
366
3
언리얼에서 제공하는 스마트 포인터 라이브러리 사용
0
75
2
FGCObject 상속 받은 객체에서 Uobject 삭제를 원할 때
0
80
2
게임 내 인벤토리 데이터를 관리 할 경우, TArray / TSet 무엇이 올바를까요?
0
75
2
8강 컴포지션 중 궁금한 것이 있습니다.
0
56
2
헤더 파일 분리 방법
0
84
2
언리얼 엔진 깃 설치
0
88
2
FObjectInitializer 를 사용한 생성자.
0
96
2
언리얼엔진 에서 새로운 클래스를 생성하면
0
75
2
GetName이 이미있는데용?
0
113
2
TObjectPtr 과 일반 포인터에 대한 용도 질문
0
105
2
UPROPERTY() 다음 라인에서 세미콜론이 입력되지 않습니다.
0
164
1
[18:50] 패키지 저장 시 이미 패키지가 있으면 로딩을 다 하고 저장하는 것이 좋은 이유가 궁금합니다
0
140
2
NonPropStudent가 GC이후 invalid된 이유
0
78
2
[44:22] 커스텀 구조체에서 GetTypeHash() 와 operator== 를 오버로딩 하는 이유에 대한 질문
0
108
2





