c ++ / cli自定义异常 - 标准构造函数

时间:2011-12-08 19:26:23

标签: .net-4.0 c++-cli

尝试从C ++ / CLI库中避免FxCop警告“不要引发保留的异常”,因此我决定分解并编写自己的异常类型。

[Serializable]
public ref class CaptureException : public Exception
{
public:
    CaptureException() : Exception() {}
    CaptureException(String^ message) : Exception(message) {}
    CaptureException(String^ message, Exception^ inner) : Exception(message, inner) {}
protected:
    CaptureException(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext^ context) : Exception(info, context) {}
};

这不会编译说明

error C2664: 'System::Exception::Exception(System::String ^,System::Exception ^)' : cannot convert parameter 1 from 'System::Runtime::Serialization::SerializationInfo ^' to 'System::String ^'

我不知道为什么我会收到这个错误。 C ++ / CLI没有完整的异常类吗?我只是尝试为我的异常实现标准构造函数,在C#中它看起来像这样并且编译得很好。

[Serializable]
public class CaptureException : Exception
{
    public DatabaseConnectionException() { }
    public CaptureException (string message) : base(message) { }
    public CaptureException (string message, Exception inner) : base(message, inner) { }
    protected CaptureException (
      System.Runtime.Serialization.SerializationInfo info,
      System.Runtime.Serialization.StreamingContext context)
        : base(info, context) { }
}

1 个答案:

答案 0 :(得分:8)

StreamingContext是一个值类型(即结构),所以你要删除帽子^:

    CaptureException(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context) : Exception(info, context) 
{}