gpt4 book ai didi

generics - 通用类中的编译器错误c1001

转载 作者:行者123 更新时间:2023-12-02 11:03:37 25 4
gpt4 key购买 nike

在我类

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也应该起作用。

谁能解释为什么编译器崩溃以及如何修复它?谢谢。

最佳答案

发现失败:

这是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的限制,以前可以这样做。

关于generics - 通用类中的编译器错误c1001,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26890018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com