2012-02-09 2 views
0

나는 클래스는 정의!진수^지정한 캐스트 잘못된 호출 ToString()는

생성자 서명이 MyParameters(ValueType^ tickValue)으로 변경되었습니다.

+0

코드가 제대로 작동합니다. 이 코드가 정확히 당신이 가지고있는 코드인가? 특히 구문 에러가 있기 때문에 그렇습니까? 예외의 스택 추적은 무엇입니까? 당신은 생성자에게'decimal'을 전달하고 있습니까? – svick

+1

'System :: Decimal'은 참조 유형이 아닌 값 유형입니다. 실제로 여기에 권투를하고 싶은 이유가 없으면 모든 Decimal ^을 Decimal로 변경하십시오. – ildjarn

답변

0

.Net에서 "값 유형에 대한 유형화 된 참조"개념이 없습니다. * Decimal^은 정확히 그 것이므로 올바르게 컴파일 할 수 없습니다. 알다시피, 컴파일러는 대신 ValueType^ 매개 변수를 만듭니다.이 매개 변수는 .NET 형식 시스템에서 Decimal^에 가장 가까운 것입니다. 또한 일부 메타 데이터를 추가하여 C++/CLI에서 생성자를 호출 할 때 박스형 Decimal 만 전달할 수 있습니다.

그러나 다른 언어는 해당 메타 데이터를 이해하지 못하므로 표시된 모든 내용은 ValueType입니다. 내가 int하지 decimal 전달

new MyParameters(42) 

공지 사항 : 그것은이 같은 말에서 생성자, C 번호를 호출 할 수 있습니다 그것은 잘 작동 것을 의미한다. 이 inttickValue 필드에 저장됩니다 (실제로는 ValueType^ 임). 실제로 그 값을 Decimal^으로 사용할 때만 InvalidCastException이됩니다.

이 문제를 해결하는 가장 쉬운 방법은 값 유형에 대한 참조를 사용하는 것이 아닙니다. 즉, Decimal^ 대신 Decimal을 사용하면 모든 것이 올바르게 작동합니다.

* 엄밀히 말하면 TypedReference이지만 정상적인 용도로 사용하지는 않습니다.

관련 문제