尝试从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) { }
}
答案 0 :(得分:8)
StreamingContext是一个值类型(即结构),所以你要删除帽子^:
CaptureException(System::Runtime::Serialization::SerializationInfo^ info, System::Runtime::Serialization::StreamingContext context) : Exception(info, context)
{}