2011-03-06 14 views
12

me sale esta advertencia al compilar el código en VS2008advertencia C4275 en Visual Studio

C4275 advertencia: clase no DLL-interfaz 'std :: runtime_error' utiliza como base para la clase DLL interfaz 'MiExcepción' 2> c: \ archivos de programa (x86) \ Microsoft Visual Studio 9.0 \ VC \ include \ stdexcept (148): véase la declaración de 'std :: runtime_error'

Mi clase se define como

class MyException : public std::runtime_error 

Respuesta

15

MSDN: http://msdn.microsoft.com/en-us/library/3tdb471s.aspx

"Una clase exportada [como en DLL] se derivó de una clase que no se exportó [como en DLL]".

Aparentemente declara que MyException se puede exportar desde una DLL (usando: __declspec(dllexport)), mientras que std::runtime_error no es exportable. Considere si realmente necesita exportar MyException. Sin embargo, si ninguno de los problemas enumerados en la página anterior se aplica a su caso específico, entonces puede ignorar esa advertencia, solo tenga en cuenta los problemas.

+1

Desde la página vinculada anteriormente: "C4275 se puede ignorar en Visual C++ si se deriva de un tipo en la Biblioteca estándar de C++". Está derivando de 'std :: runtime_error', por lo tanto, puede ignorar la advertencia. – mbdevpl

0

Terminé aquí buscando una respuesta al mismo problema. Tenía una excepción personalizada derivada de std :: runtime_error y la estaba exportando de mi dll.

Para excepciones, parece que la solución más simple es NO EXPORTAR la clase derivada. Puede hacer esto si mueve su implementación desde el archivo de origen (.CPP) al encabezado (.HPP). Para mí, esto fue trivial. Me imagino que en la mayoría de los casos con excepciones, este sería el caso.

Esto es "bueno" porque el cliente real compila y vincula la implementación de su excepción personalizada con su implementación de std :: runtime_error. Esto es lo que quiere y es, de hecho, lo que la advertencia C4275 intenta protegerlo: una incompatibilidad de tiempo de ejecución entre los dos tipos de objetos std :: runtime_exception.

Cuestiones relacionadas