Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

missing type specifier - [type] assumed. Note: C++ does not support default-[type]

constexpr 예약어가 없던 시절에는, const 예약어로 상수를 지정하는 경우 .h 파일과 .cpp 파일에 각각 다음과 같이 정의를 해야 했었습니다.

// .h

extern const int my_var;

// .cpp

const int my_var = 5;

게다가 const 상수 변수라고 해도 이를 배열의 크기로 지정하려고 하면,

void func()
{
   int arr[my_var];
}

다음과 같은 컴파일 오류가 발생합니다.

C4430   missing type specifier - int assumed. Note: C++ does not support default

C2144   syntax error : 'int' should be preceded by ';'

이 때문에 const 상수 변수를 어쩔 수 없이 #define 매크로로 정의를 바꿔야만 했는데요.

이 문제가 constexpr 하나로 모두 해결이 됩니다. 정의는 단순하게 .h 파일에 하나만 유지해주면 되고,

// .h

constexpr int my_var = 5;

컴파일 타임에 평가가 되는 것이므로 배열의 크기 지정으로도 문제 없이 사용할 수 있습니다.




그런데 이상하군요, Visual Studio 2015에 내장된 Visual C++ 컴파일러는 분명히 constexpr을 지원하는데도 여전히 다음과 같은 컴파일 오류만 발생합니다.

C4430   missing type specifier - int assumed. Note: C++ does not support default

C2144   syntax error : 'int' should be preceded by ';'

원인을 찾았는데, ^^; "Platform Toolset"의 지정을 "Visual Studio 2013 - Windows XP (v120_xp)"로 설정한 경우였습니다. 그래서 다음과 같이 "Visual Studio 2015 - Windows XP (v140_xp)"로 지정하니,

xp_v120_constexpr_1.png

정상적으로 컴파일이 되었습니다. ^^ (CTP 시절의 문제 때문에 v140_xp로 지정하지 않았던 것인데 정식 버전에서는 다행히 문제가 해결되었습니다.)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/13/2016]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  158  159  160  161  [162]  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
999정성태2/28/201146562개발 환경 구성: 108. RemoteFX - Windows 7 가상 머신에서 DirectX 9c 환경을 제공 [5]
998정성태2/27/201120264Team Foundation Server: 42. TFS Application-Tier만 재설치
996정성태2/12/201137716디버깅 기술: 35. windbg - 분석 예: 시작하자마자 비정상 종료하는 프로세스 - NullReferenceException
995정성태2/11/201156256.NET Framework: 205. 코드(C#)를 통한 풀 덤프 만드는 방법 [4]
994정성태2/10/201136177디버깅 기술: 34. Windbg - ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.4200.dll, Win32 error 0n2 [1]
993정성태2/10/201128517개발 환경 구성: 107. 하나의 WPF 프로젝트를 WinExe / Library로 빌드하는 방법
992정성태10/15/201129360개발 환경 구성: 106. VSS(Volume Shadow Service)를 이용한 Hyper-V VM 백업/복원 [2]
991정성태2/6/201148823개발 환경 구성: 105. 풀 덤프 파일을 남기는 방법 [4]
990정성태2/2/201134000개발 환경 구성: 104. Visual C++ Custom Build Tool 사용예 [1]파일 다운로드1
989정성태2/1/201130510개발 환경 구성: 103. DOS batch - 동기 방식으로 원격 서비스 제어
988정성태1/30/201126675개발 환경 구성: 102. MSBuild - DefineConstants에 다중 전처리 값 설정
987정성태1/29/201139858디버깅 기술: 33. PDB Symbol 로드 오류 - Cannot find or open the PDB file. [2]
986정성태1/26/201131267.NET Framework: 204. 분리된 ThreadPool 사용 - Smart Thread Pool
985정성태1/25/201127940디버깅 기술: 32. 인증서로 서명된 닷넷 어셈블리의 실행 지연 현상
984정성태1/25/201122641개발 환경 구성: 101. SharePoint 2010 - Form Design
983정성태1/23/201127677제니퍼 .NET: 15. 눈으로 확인하는 maxWorkerThreads, minFreeThreads 설정값 [1]
982정성태1/22/201124974개발 환경 구성: 100. SharePoint 2010 - iPad 친화적인 게시판 만들기 (사용자 지정 목록) [1]
981정성태1/19/201120874개발 환경 구성: 99. SharePoint 2010 - 웹 애플리케이션 생성 시 고려해야 할 점. [1]
980정성태1/19/201132284개발 환경 구성: 98. SharePoint 2010 - Office Web Apps 설치
979정성태1/18/201124996개발 환경 구성: 97. SharePoint 2010 팀 사이트 구성
978정성태1/16/201131955.NET Framework: 203. VPN 자동 연결 및 Router 설정 추가
977정성태1/12/201131302개발 환경 구성: 96. SharePoint 2010 설치 [5]
976정성태1/11/201153930오류 유형: 111. IIS - 500.19 오류 (0x8007000d)
975정성태1/10/201128145.NET Framework: 202. CLR JIT 컴파일러가 생성한 기계어 코드 확인하는 방법 [3]파일 다운로드1
974정성태1/8/201126966.NET Framework: 201. 윈폼 TreeView - Bold 폰트 설정 후 텍스트가 잘리는 문제 [1]파일 다운로드1
973정성태1/7/201126299.NET Framework: 200. IIS Metabase와 ServerManager 개체 활용파일 다운로드1
... 151  152  153  154  155  156  157  158  159  160  161  [162]  163  164  165  ...