泛型类中的编译器错误c1001

时间:2014-11-12 15:02:46

标签: generics compiler-errors c++-cli

在我班上

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也应该有效。

任何人都可以解释为什么编译器崩溃以及如果可能的话如何修复它?谢谢。

1 个答案:

答案 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约束所致。