在我班上
generic <class T>
public ref class CFifo
{
public:
enum class EnumResult
{ ... }
EnumResult AddData (int i_iStart, int i_iLength, array<T>^ i_aData);
...
}
我的编译器崩溃(“c / c ++优化编译器已经停止工作”),错误c1001,以及简化我的类的建议。失败发生在.cpp中的return
行:
generic <class T>
CFifo<T>::EnumResult CFifo<T>::AddData (int i_iStart,
int i_iLength,
array<T>^ i_aData)
{
...
return CResult<EnumResult>::TraceMsg (ms_tracesource, TraceEventType::Error, EnumResult::Error_MutexTimeout, __FUNCTION__"()", "timeout at receiving mutex.");
班级CResult
是另一个通用类:
generic <class TResult> where TResult : value class // value class constraint is not necessary
public ref class CResult abstract sealed
我在其他类中使用相同的行CResult<EnumResult>::TraceMsg
而没有任何问题。
我可以创建和使用EnumResult
的变量而不会出错,因此我认为将此类型传递给泛型类CResult
也应该有效。
任何人都可以解释为什么编译器崩溃以及如果可能的话如何修复它?谢谢。
答案 0 :(得分:0)
发现失败:
这是value class
中的generic <class TResult> ref class CResult
约束
一旦我删除它,编译器崩溃就消失了。怪异。
我不得不在CResult
修改我的代码:
从
return static_cast<TResult>(iResult);
到
return static_cast<TResult>(System::Enum::ToObject (TResult::typeid, iResult));
因为我无法再直接从int
投射到TResult
,这可能是由于value class
约束所致。