Error: Recibe un "error grave C1001: ERROR interno del compilador" error al crear un objeto que es una copia de una función virtual devolver el valor en Visual C++ 6.0

Seleccione idioma Seleccione idioma
Id. de artículo: 226110 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

Síntomas

Cuando cree un objeto que es una copia de un valor devuelto de función virtual (un objeto temporal) utilizando el constructor proporcionado por compilador copia, puede recibir el siguiente error:
Test.cpp(22): error grave C1001: ERROR interno del compilador
(del compilador archivo 'msc1.cpp', línea 1794)
Por favor, elija el comando soporte técnico en Visual C++
Menú Ayuda o abra el archivo de Ayuda de soporte técnico para obtener más información

Consulte los pasos para reproducir en la sección más información.

Solución

Hay cuatro formas de solucionar el problema:
  1. Definir explícitamente un Constructor Copy. (Vea la solución nº 1 en código de ejemplo siguiente).
  2. Quite la palabra clave virtual de la función que devuelve el valor. (Vea la solución # 2 en código de ejemplo siguiente).
  3. Presentar una variable temporal para almacenar el valor devuelto. (Consulte la solución nº 3 en el código de ejemplo siguiente).
  4. Elimine la compatibilidad del compilador para el control sincrónico de excepciones de (C++). Esto se consigue quitando /GX (el valor predeterminado de Visual Studio) de las opciones de compilación. (Vea la solución Nº 4 en código de ejemplo siguiente).
Solución nº 1 es la solución recomendada siempre que sea posible.

Nota : si define un constructor de copias, también debe definir un operador de asignación (operador =).

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo.

Este problema se corrigió en Microsoft Visual C++ .NET.

Más información

////////////////////////////////////////////////////////////////////// 
// cl /c /GX test.cpp
// test.cpp(22) : fatal error C1001: INTERNAL COMPILER ERROR
//  (compiler file 'msc1.cpp', line 1794) 
//  Please choose the Technical Support command on the Visual C++ 
//  Help menu, or open the Technical Support help file for more information
////////////////////////////////////////////////////////////////////// 
class A
{
  public:
    /* workaround #1, add an explicit copy constructor to class A */ 
    // A(A& a) {};
    ~A() {}; 
};
class B
{
  public:
 /* workaround #2, remove virtual keyword from B::GetA */ 
    virtual A& GetA(void);
    void Func (void);
};
void B::Func (void)
{
  A *att;
  att=new A(GetA());
  /* workaround #3, substitute the above line with the following two lines */ 
  //A tmp = GetA();
  //att=new A(tmp);
}
/* workaround #4, remove /GX compiler option */ 
				

Propiedades

Id. de artículo: 226110 - Última revisión: domingo, 23 de febrero de 2014 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft Visual C++ 6.0 Enterprise
  • Microsoft Visual C++ 6.0 Professional
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palabras clave: 
kbnosurvey kbarchive kbmt kbtshoot kberrmsg kbbug kbcompiler kbfix kbnoupdate KB226110 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 226110

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com