首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型类中的编译器错误c1001

泛型类中的编译器错误c1001
EN

Stack Overflow用户
提问于 2014-11-12 15:02:46
回答 1查看 52关注 0票数 0

在我的班上

代码语言:javascript
复制
generic <class T>  
public ref class CFifo
{
public:
  enum class EnumResult
  { ... }

  EnumResult AddData (int i_iStart, int i_iLength, array<T>^ i_aData);
  ...
}

我得到了错误c1001的编译器崩溃("c/c++优化编译器已经停止工作“),以及简化类的建议。故障发生在return行的.cpp中:

代码语言:javascript
复制
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是另一个泛型类:

代码语言:javascript
复制
generic <class TResult> where TResult : value class  // value class constraint is not necessary
public ref class CResult abstract sealed

我在其他类中使用的是同一行CResult<EnumResult>::TraceMsg,没有问题。

我可以在没有错误的情况下创建和使用EnumResult的变量,所以我认为将这种类型传递给泛型类CResult也应该有效。

有人能解释编译器崩溃的原因以及如何在可能的情况下修复它吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-12 16:04:58

发现故障:

它是value classgeneric <class TResult> ref class CResult中的约束。

一旦我删除它,编译器崩溃就消失了。真奇怪。

不过,我不得不用CResult修改我的代码:

从…

代码语言:javascript
复制
return static_cast<TResult>(iResult);

代码语言:javascript
复制
return static_cast<TResult>(System::Enum::ToObject (TResult::typeid, iResult));

因为我不再能够直接从int转换到TResult,这在value class约束之前是可能的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26890018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档