프로젝트를 빌드 하던 도중 warning C4482 을 발견 했다.
경고 1
warning C4482: 비표준 확장이 사용되었습니다. 정규화된 이름에 'MyCodeException::ExceptionID' 열거형을 사용했습니다.
[경로]\[파일].cpp [줄]
위와 같은 에러가 발생하는 이유는 'enum class'로 정의된 열거형을 사용할 때 발생한다.
class MyCodeException {
public:
enum class ExceptionID {
num1 = 1,
};
}
AfxMessageBox(MyCodeException::ExceptionID::num1);
- 정식 설명 -
이 경고 메세지는 형식 내부(클래스, 구조체, 네임스페이스 등)에 선언된 이름 있는 'enum class'를 사용할 때 나타난다.
MSVC는 C++11 표준의 'enum class'를 비표준 확장으로 간주할 수 있다.
빌드 시 경고 메세지를 없애기 위해서는
C++11 에서 추가된 'enum class' 대신 기존의 'enum' 형식을 사용하면 된다.
enum MyCodeException {
num1
};
AfxMessageBox(MyCodeException::num1);
혹은 기존의 소스코드를 변경하기 싫거나 충돌이 일어난다면
단순히 컴파일러를 다그치면 된다.
#pragma warning(disable : 4482)
위 컴파일러 옵션을 사용하면 해당 warning 을 고려하지 않는다.
반응형
'C,C++' 카테고리의 다른 글
[C/C++] WORD, DWORD, QWORD (1) | 2019.03.04 |
---|---|
[C/C++] h, cpp 의 관계, include 의 원리 (0) | 2019.02.14 |
[C++]type casting에 관하여 (0) | 2019.01.31 |
Segment 란 (0) | 2019.01.23 |
메모리 영역(Heap, Stack, Data, Code) (0) | 2019.01.23 |