2
我有一個C++/CLI包裝類來在C#和本地C++之間進行互操作。我收到一個與System.Nullable
相關的奇怪錯誤。據我所知,對於基本類型,System.Nullable<T>
相當於T?
。所以我這樣做:不能將類型'System.ValueType'隱式轉換爲'int?'
C#:
public int? RoboticsArmRotation {
get { return mRobotics.ArmRotation; }
}
C++/CLI,接口:
virtual property System::Nullable<int>^ ArmRotation{ System::Nullable<int>^ get() = 0; }
C++/CLI,具體類:
virtual property System::Nullable<int>^ ArmRotation {
System::Nullable<int>^ get() {
boost::optional<int> value = m_pNativeInstance->getArmRotation();
return value.is_initialized()? gcnew System::Nullable<int>(value.get()) : gcnew System::Nullable<int>();
}
}
但我拿到冠軍的編譯錯誤。鑄造到int?
可以解決它,但是我錯誤的是,當我將可空作爲參考定義時,它說System.ValueType
。我可以離開演員繼續前進,還是我做錯了什麼?
'可爲空'是一個值類型,而不是引用類型。 –
2011-12-23 12:36:56
我對託管C++一無所知,但您確定需要'gcnew'嗎? '可爲空'是一個值類型,而不是引用類型。 'gcnew'盒子,還是隻適用於參考類型? –
2011-12-23 12:38:24
@ LasseV.Karlsen在C++/CLI中,您可以使用裝箱值類型(強制類型化)轉換爲「System.ValueType」(它是一個引用類型)和一些元數據。 – CodesInChaos 2011-12-23 12:43:02