해결된 질문
작성
·
46
0
타 프로젝트에서 동일하게 사용하기 위해서
LOG-NETMODEINFO를
#define LOG_NETMODEINFO ( (GetNetMode() == NM_Client) ? *FString::Printf(TEXT("CLIENT %d"), GPlayInEditorID) : ((GetNetMode() == ENetMode::NM_Standalone) ? TEXT("STANDALONE") : TEXT("SERVER")))
다음과 같이 강의 그대로 사용을 하면
static_assert failed : 'invalid argument(s) passed to printf'
라는 에러가 나옵니다.
하지만 다음과 같이 작성하면 에러가 나타나지 않습니다. 이유를 아직까지 잘 모르겠어서 질문 남깁니다.
#define LOG_NETMODEINFO ((GetNetMode() == ENetMode::NM_Client) ? TEXT("Client") : ((GetNetMode() == ENetMode::NM_Standalone) ? TEXT("StandAlone") : TEXT("Server")))
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. jjune0427님.
LOG_NETMODEINFO
를 정의하는 과정에서 발생한 에러 메시지는 Printf
와 관련이 있습니다. 두 가지 코드를 비교하면, 첫 번째 코드는 FString::Printf
를 사용하여 출력 문자열을 생성하고, 두 번째 코드는 단순히 TEXT
매크로를 통해 문자열을 반환합니다.
FString::Printf와 TEXT 매크로:
FString::Printf
는 C 스타일의 포맷팅을 지원하는 함수로, 주로 변수 값을 문자열로 변환하여 포함시키기 위해 사용됩니다. 이 함수는 정확한 포맷 문자열과 타입을 요구하기 때문에, 잘못된 인자나 사용법이 있을 경우 컴파일 단계에서 에러가 발생합니다.TEXT
매크로는 단순히 일련의 문자열을 리턴하는 매크로로, 변수를 포함하지 않기 때문에 포맷팅과 관련된 문제에서 자유롭습니다.GPlayInEditorID 사용:
GPlayInEditorID
는 FString::Printf
함수의 두 번째 인자로 사용되고 있습니다. 하지만 이 변수가 적절히 정의되거나 초기화되지 않은 경우 오류가 발생할 수 있습니다.GPlayInEditorID
를 올바르게 정의하고 초기화해 주시고, FString::Printf
를 사용할 때 포맷 문자열과 변수가 올바르게 매핑되었는지 확인해 주세요.TEXT
매크로를 사용하여 문제를 피할 수 있습니다.관련된 더 많은 정보를 원하시면, 언리얼 공식 문서나 개발자 커뮤니티를 참고하시길 권장드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
이게 문제였던 것 같습니다. 잘됩니다. 감사합니다.