我已经建立了一个提供从标准异常派生出的异常类的库:
#include <stdexcept>
#include <string>
class BaseException : public std::runtime_error
{
public:
BaseException( std::string const & msg );
};
到目前为止,一切都很顺利,在Unix上编译和处理得相当不错。现在我正在准备将其编译成Windows DLL:
#ifdef WIN32
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif
#include <stdexcept>
#include <string>
class MY_EXPORT BaseException : public std::runtime_error
{
public:
BaseException( std::string const & msg );
};
然而,这给了我一个警告C4275: non – DLL-interface class 'std::runtime_error' used as base for DLL-interface class 'BaseException'
。
很不幸,我有点对微软风格的文档产生过敏反应:太啰嗦了,也没有明确的指示。这让我完全搞不清楚需要做什么来解决我的问题。
你们中的任何人都能启发我吗?我可以放弃基类,但是那样捕获std::runtime_error
或std::exception
就无法捕获我的自定义异常类了,而我非常希望能够实现这一点。所以,怎么办?
std::runtime_error
则不是。感谢微软搞砸了这个问题。我更喜欢从std::runtime_error
派生,因为它具有char const *
构造函数,而std::exception
缺少该构造函数,这使得事情变得*更加容易。我知道我为什么喜欢避免在Windows上编码... - DevSolar