2013-10-18 1 views
0

C++/CLI의 지원이 2010 년에 정말 나빴으므로 (C++/cli 용 마법사 없음), 내 프로젝트 중 하나는 여전히 VS2005 C++/CLI입니다. 이제이 마지막 프로젝트를 마이그레이션 할 때입니다. 불행히도 컴파일 타임에 오류가 발생합니다. 그들이 전에 완벽하게 작동하기 때문에 내가 이해하지 못하는 그들 중 두, VS2012에이 작은 조각을 컴파일하려고 :C++/CLI에서 vs2012로 캐스팅하고 getstring enum을 처리하는 방법

예상대로
 enum class EMyEnum 
     { 
      Unknown, 
      NotBetter, 
     }; 

     Array ^lEnums=Enum::GetValues(EMyEnum::typeid); 
     Object ^test=lEnums->GetValue(0); 
     EMyEnum t=(EMyEnum)test; // VS2012 ERROR -> Cannot cast 
     String ^thetext=t.ToString(); // VS2012 ERROR -> Left of ToString() needs object 

그것뿐만 아니라 오류 또는 경고없이 컴파일 VS2005에서 말할 필요도없이, 그것은 또한 작동 .

답변

2

예, 이것은 VS2012 이상에서 발생합니다. 이는 enum class 구문을 채택한 C++ 11 언어 표준으로 인해 발생합니다. 이제 C++/CLI 컴파일러는 관리되는 enum 유형을 관리되지 않는 유형과 더 이상 구분할 수 없습니다. Object ^로부터의 캐스트는 관리되는 enum에만 유효합니다.

해결 방법은 바보 같지만 효과적이므로 enum 클래스의 액세스 가능성을 명시 적으로 지정해야합니다. C++ 11에서는 올바르지 않지만 C++/CLI에서는 유효합니다.

private enum class EMyEnum  // Note: added private 
    { 
     Unknown, 
     NotBetter, 
    }; 

또는 공공를 사용 수정.

+0

당신이 굉장하다는 것을 알고 있습니까? :-) –

관련 문제