Erro: Você recebe um "Erro fatal C1001: erro interno do compilador" Erro ao criar um objeto que é uma cópia de uma função virtual retornar o valor no Visual C++ 6.0

Traduções deste artigo Traduções deste artigo
ID do artigo: 226110 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Sintomas

Ao criar um objeto que é uma cópia de um valor de retorno de função virtual (um objeto temporário) usando o construtor de cópia fornecidos pelo compilador, você pode receber o seguinte erro:
Test.cpp(22): erro fatal C1001: erro interno do compilador
(compilador arquivo 'msc1.cpp', linha 1794)
Escolha o comando de suporte técnico no Visual C++
Menu ' Ajuda ', ou abra o arquivo de Ajuda do suporte técnico para obter mais informações

Consulte as etapas para reproduzir na seção mais informações abaixo.

Resolução

Existem quatro maneiras de contornar o problema:
  1. Defina explicitamente um construtor de cópia. (Consulte a solução alternativa 1 no código de exemplo abaixo).
  2. Remove a palavra-chave virtual a função que retorna o valor. (Consulte a solução 2 no código de exemplo abaixo).
  3. Apresente uma variável temporária para armazenar o valor de retorno. (Consulte a solução 3 no código de exemplo abaixo).
  4. Remova suporte a compilador para tratamento de exceção síncrono (C++). Isso é feito removendo /GX (o padrão Visual Studio) de suas opções de compilação. (Consulte a solução nº 4 no código de exemplo abaixo).
Solução nº 1 é a solução recomendada sempre que possível.

Observação : se você definir um construtor de cópia, você também deve definir um operador de atribuição (operador =).

Situação

A Microsoft confirmou que este é um bug no Microsoft produtos que estão listados no início deste artigo.

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

Mais Informações

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

ID do artigo: 226110 - Última revisão: domingo, 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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