ID do artigo: 125749 - Última revisão: quinta-feira, 13 de março de 2008 - Revisão: 8.0

Descrição do erro tempo de execução R6025 no Visual C++

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo descreve um problema que pode ocorrer quando você estiver desenvolvendo um programa. Se você ainda estiver tendo um problema semelhante ao descrito neste artigo, talvez seja um problema diferente. Para procurar por problemas relacionados a um problema específico, inclua Verifique o nome de produto em sua pesquisa para restringir os resultados. Para solucionar problemas semelhantes, consulte a seção "problemas semelhantes e resoluções" neste artigo.

Sintomas

O programa de C++ falha e relata o seguinte erro de tempo de execução:
Erro de tempo de execução R6025
-chamada de função virtual pura

Causa

Este erro ocorre quando seu aplicativo indiretamente chama uma função de membro virtual puro em um contexto onde uma chamada para a função não é válida. Na maioria dos casos, o compilador detecta isso e relata o erro ao criar o aplicativo. Mas, dependendo de como seu código é gravado, às vezes, o problema é detectado apenas em tempo de execução.

O erro ocorre quando você chamar uma função virtual pura no contexto de uma chamada ao construtor ou destruidor de uma classe base abstrata indiretamente. Isso está ilustrado no código de exemplo abaixo, junto com alguns descrição mais.

Resolução

Chamar uma função essencialmente virtual é um erro de programação, portanto, você precisará encontrar a chamada para a função virtual pura e reescrever o código para que ele não é chamado.

Uma maneira de localizar uma chamada para uma função virtual pura é substituir a função virtual pura uma implementação que chama a função de API do Windows DebugBreak . Ao usar o depurador, DebugBreak fará com que um ponto de interrupção embutida. Quando o código parar a execução neste ponto de interrupção, você pode exibir a pilha de chamadas para ver onde a função foi chamada.

Outra maneira para localizar uma chamada para uma função virtual pura é definir um ponto de interrupção na função _purecall que é encontrada no PureVirt.c. Recentes sobre esta função tem a vantagem de manter a pilha intacto para que você pode rastrear o que está ocorrendo.

Situação

Esse comportamento é por design.

Mais Informações

Para obter mais informações, consulte a página "C Run-Time Errors R6002 através de R6025" da seção "Criar erros" no site do Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/aa277044(VS.60).aspx (http://msdn2.microsoft.com/en-us/library/aa277044(VS.60).aspx)
Observação Erro R6025 não está documentado na Ajuda on-line incluída com o Visual C++, versões 2.x ou abaixo ou manuais. No entanto, ele rapidamente é abordado na parte 3 do arquivo Readme.wri fornecido com o Visual C++ versão 2.0.

Código de exemplo

   /* Compile options needed: none
   */ 

   class A;

   void fcn( A* );

   class A
   {
   public:
       virtual void f() = 0;
       A() { fcn( this ); }
   };

   class B : A
   {
       void f() { }
   };

   void fcn( A* p )
   {
       p->f();
   }

   // The declaration below invokes class B's constructor, which
   // first calls class A's constructor, which calls fcn. Then
   // fcn calls A::f, which is a pure virtual function, and
   // this causes the run-time error. B has not been constructed
   // at this point, so the B::f cannot be called. You would not
   // want it to be called because it could depend on something
   // in B that has not been initialized yet.

   B b;

   void main()
   {
   }
				

Problemas semelhantes e resoluções

Se você ainda estiver tendo um problema semelhante o problema descrito neste artigo, talvez seja um problema diferente. Para obter mais informações sobre problemas semelhantes e resoluções, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
240437  (http://support.microsoft.com/kb/240437/ ) Erro de tempo de execução do Money: "R6025 - chamada de função virtual puro"
308260  (http://support.microsoft.com/kb/308260/ ) Como solucionar erros de script no Internet Explorer 6 e no Internet Explorer 7 em computadores baseados no Windows 2000, baseado no Windows XP, baseado no Windows Server 2003 ou com base no Windows Vista
267572  (http://support.microsoft.com/kb/267572/ ) WD2000: Mensagem de erro: "Erro de tempo de execução '5'" ao iniciar o Word
170409  (http://support.microsoft.com/kb/170409/ ) SBFM97: Erros Microsoft Visual C++ tempo de execução importar dados do QuickBooks
309299  (http://support.microsoft.com/kb/309299/ ) Erro de tempo de execução ao navegar para algumas páginas da Web

A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 1.52 Professional Edition
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 1.0 Professional Edition
Palavras-chave: 
kbmt kbresolve kbtshoot kbcompiler kbcpponly kberrmsg kbprb KB125749 KbMtpt
Tradução automáticaTraduçã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: 125749  (http://support.microsoft.com/kb/125749/en-us/ )