Erro: É apresentada uma "erro fatal C1001: erro interno do compilador" Erro ao criar um objecto que é uma cópia de uma função virtual devolver o valor no Visual C++ 6.0

Traduções de Artigos Traduções de Artigos
Artigo: 226110 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Sintomas

Quando criar um objecto que é uma cópia de um valor devolvido da função virtual (um objecto temporário) utilizando o Construtor de fornecido pelo compilador cópia, poderá receber o seguinte erro:
Test.cpp(22): erro fatal C1001: erro interno do compilador
(compilador ficheiro 'msc1.cpp', linha 1794)
Escolha o comando de suporte técnico no Visual C++
Menu ' Ajuda ' ou abrir o ficheiro de ajuda de suporte técnico para mais informações

Consulte os passos para reproduzir na secção mais informação abaixo.

Resolução

Existem quatro formas de contornar o problema:
  1. Defina explicitamente um construtor de copiar. (Consulte a solução alternativa # 1 no código de exemplo abaixo).
  2. Remova a palavra-chave virtual a função que devolve o valor. (Consulte a solução alternativa # 2 no código de exemplo abaixo).
  3. Introduzir uma variável temporária para armazenar o valor devolvido. (Consulte a solução alternativa n.º 3 no código de exemplo abaixo).
  4. Remova suporte de compilador para processamento de excepções (C++) síncrono. Isto é conseguido através da remoção /GX (a predefinição do Visual Studio) das opções de compilação. (Consulte a solução alternativa n.º 4 no código de exemplo abaixo).
Solução n.º 1 é a solução recomendada, sempre que possível.

Nota : Se definir um construtor de cópia, também deve definir um operador de atribuição (operador =).

Ponto Da Situação

A Microsoft confirmou que este é um erro no Microsoft produtos listados no início deste artigo.

Este problema foi corrigido no Microsoft Visual C++ .NET.

Mais Informação

////////////////////////////////////////////////////////////////////// 
// 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 */ 
				

Propriedades

Artigo: 226110 - Última revisão: 23 de fevereiro de 2014 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palavras-chave: 
kbnosurvey kbarchive kbmt kbtshoot kberrmsg kbbug kbcompiler kbfix kbnoupdate KB226110 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 226110

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