인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

alwjw님의 프로필 이미지

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12

장치 초기화

C++ 언어 표준과 Engine.lib 오류에 관하여..

작성

·

150

0

안녕하세요. DirectX12 강의를 이제 수강 시작한 학생입니다.
강의에선 C++ 언어 표준을 C++ 14로 사용중입니다.
전, C++ 20을 사용하여 아래와 같이 구조체 초기화를 사용하려 했습니다.
DXGI_SWAP_CHAIN_DESC sd = { .BufferDesc = { .Width = static_cast<uint32>(info.width), .Height = static_cast<uint32>(info.height), .RefreshRate = { .Numerator = 60, .Denominator = 1 }, .Format = DXGI_FORMAT_R8G8B8A8_UNORM, .ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED, .Scaling = DXGI_MODE_SCALING_UNSPECIFIED }, .SampleDesc = { .Count = 1, .Quality = 0 }, .BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT, .BufferCount = SWAP_CHAIN_BUFFER_COUNT, .OutputWindow = info.hwnd, .Windowed = info.windowed, .SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD, .Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH };

하지만, C++ 20을 사용하면 Engine 프로젝트 빌드 시, byte << 모호하다는 오류가 나오며, Engine.lib 파일이 Output 폴더 내에서 사라집니다. 억지로 빌드 시킨 후, Client 프로젝트 실행 시 오류가 생깁니다.
C++ 20기준 혹은 미리보기 최신 C++ 초안 기능을 사용하여 구조체 초기화 사용을 유지 한 채 실행할 수 있는 방법이 있을까요 ?

답변 2

0

케이초라님의 프로필 이미지

저도 같은 문제가 발생해서 댓글 남겨봅니다.

 

MS의 Windows 관련 라이브러리에서 typedef를 통해 byte를 정의하고 있는데요, C++17부터 std::byte라는 표준 byte 타입이 추가되어서 이것과 충돌하는 문제가 있습니다.

만약 VS에서 C++ 컴파일러 버전을 17 이상으로 세팅하실 분이라면, 여러 방법이 있는데 저의 경우 가장 먼저 컴파일되는 Engine 정적 라이브러리 프로젝트의 pch 파일 최상단에 아래 키워드를 추가했습니다.

#define _HAS_STD_BYTE 0

이러면 std::byte가 무시된다고 합니다 :)

0

alwjw님의 프로필 이미지
alwjw
질문자

질문에 대한 해답이 Texture Mapping 강의에 나오는 것으로 확인했습니다. 해결완료 했습니다.

alwjw님의 프로필 이미지

작성한 질문수

질문하기