visual studio 상에서 c++17 옵션을 활성화 시 만날 수 있는 오류
- 영문
1>c:\program files (x86)\windows kits\10\include\10.0.14393.0\shared\rpcndr.h(192): error C2872: ‘byte’: ambiguous symbol
1>c:\program files (x86)\windows kits\10\include\10.0.14393.0\shared\rpcndr.h(191): note: could be ‘unsigned char byte’
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\include\cstddef(15): note: or ‘std::byte’
- 한글
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um\oaidl.h(563,26): error C2872: ‘byte’: 모호한 기호입니다.
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\rpcndr.h(191,23): message : ‘unsigned char byte’일 수 있습니다.
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\cstddef(29,12): message : 또는 ‘std::byte’
c++17 에서 추가된 std::byte 의 windows.h 의 byte 와의 정의중복 으로 인한 빌드 오류
https://en.cppreference.com/w/cpp/types/byte
windows.h
typedef unsigned char byte;
해당 오류를 피하는 방법을 대부분의 해결책으로 기존windows 에서 정의한 byte 가 먼져 여서 그런지 std::byte 를 비활성 하는 옵션을 사용하고 있다
프로젝트 속성>c/c++>전처리기 페이지의 정의 부분에 _HAS_STD_BYTE=0 와 같이 추가 하거나
windows.h 와 각 std include 시점에 맞추어 #define _HAS_STD_BYTE 0 을 넣어주게되면 std::byte 가 비활성되며 정상 빌드 된다
서칭할 때 에는 좀더 미려한 방법이 있을거라 생각했으나 아직 표준에서 해결은 못한것으로 보인다
댓글 남기기