C++ Visual Studio中的C4275警告

C++ Visual Studio中的C4275警告,c++,visual-c++,C++,Visual C++,我在VS2008中编译代码时收到此警告 警告C4275:非dll接口类“std::runtime_error”用作dll接口类“MyException”的基 2> c:\ProgramFiles(x86)\Microsoft Visual Studio 9.0\VC\include\stdexcept(148):请参阅“std::runtime\u错误”的声明 我的班级被定义为 class MyException : public std::runtime_error MSDN: “导出的类[

我在VS2008中编译代码时收到此警告

警告C4275:非dll接口类“std::runtime_error”用作dll接口类“MyException”的基 2> c:\ProgramFiles(x86)\Microsoft Visual Studio 9.0\VC\include\stdexcept(148):请参阅“std::runtime\u错误”的声明

我的班级被定义为

class MyException : public std::runtime_error
MSDN:

“导出的类[如在DLL中]是从未导出的类[如在DLL中]派生的。”


显然,您正在声明可从DLL导出
MyException
(通过使用:
\u declspec(dllexport)
),而
std::runtime\u error
不可导出。考虑< <代码> MyExtExt/Cuth>是否真的需要导出。但是,如果上面列出的问题都不适用于您的具体案例,那么您可以忽略该警告—只需注意这些问题。

我在这里结束时,正在寻找同一问题的答案。我有一个来自std::runtime_错误的自定义异常,正在从我的dll导出它

对于异常,最简单的解决方案似乎是不导出派生类。如果将实现从源(.CPP)文件移动到头(.HPP),则可以执行此操作。对我来说,这是微不足道的。我想在大多数情况下,除了例外情况,情况都是这样


这是一件“好事”,因为客户机实际编译并链接自定义异常的实现及其std::runtime_error的实现。这就是你想要的,实际上是C4255警告试图保护你的:一个运行时不兼容的两个STD::RunTimeObject异常类型。< /P>从上面链接的页面中得出:“C4255在Visual C++中可以忽略,如果你是从标准C++库中的一个类型派生的。”您是从
std::runtime\u error
派生的,因此您可以忽略该警告。@mbdevpl该页面还说您需要
编译调试版本(/MTd)
,这是非常无用的,因为
/MTd
意味着与静态CRT链接!除非文章的真正意思是
/MDd
?无论如何,这篇文章告诉alink,你不应该静态链接CRT,所以这可能是文章中的一个错误。