CORRECÇÃO: Recebe erro mensagem quando um "usando espaço para nome std" diretiva é colocada antes de operador de amigo

Traduções deste artigo Traduções deste artigo
ID do artigo: 192539 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando um "usando espaço para nome std" diretiva é colocada antes de uma declaração de operador amigo; você pode receber uma das seguintes dois erros:

caso 1
Erro C2248: [nome da variável membro]: não é possível acesso particular membro declarado na classe [nome da classe] [nome do arquivo] (número de linha): consulte declaração de variável de membro]
caso 2
[nome do arquivo](número de linha): erro fatal C1001: erro interno do compilador

(arquivo de compilador 'msc1.cpp', linha 1786)
Escolha o comando de suporte técnico no menu Ajuda do Visual C++ ou abrir o arquivo de Ajuda suporte técnico para obter mais informações.

Erro ao executar cl.exe.

Causa

A resolução de operador amigo falhará no compilador front-end quando std espaço para nome é introduzido.

Resolução

Um hotfix suportado agora está disponível da Microsoft, mas destina-se somente a corrigir o problema descrito neste artigo. Aplique-o somente nos sistemas que apresentarem esse problema específico. Esta correcção poderá submetida a testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde o próximo Service Pack 3 para Visual Studio 6.0 que contém esse hotfix.

Para resolver esse problema imediatamente, contate o Atendimento Microsoft para obter o hotfix. Para obter uma lista completa de telefones do Atendimento Microsoft e informações sobre os custos de suporte da, visite o seguinte site:
http://support.microsoft.com/contactus/?ws=support
Observação Em alguns casos, as taxas cobradas pelas ligações para chamadas de suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados a questões e problemas que não se qualificam à atualização específica em questão de suporte adicionais.A versão em inglês dessa correção deve ter os seguintes atributos de arquivo ou posteriores:
   Date      Time      Size        File Name  Version#      Platform
   -----------------------------------------------------------------

   9/15/98   08:26p    1,183,795   C1xx.dll   12.00.8257.0  (x86)
				

Como Contornar

Siga um destes procedimentos para solucionar esse problema:
  • Mover o "usando espaço para nome std" diretiva após a declaração de operador amigo.
  • Evite usar o "usando espaço para nome std" diretiva.
  • Frente declare o operador e/ou classe.

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados na seção "Aplica-se a".Esse bug foi corrigido no Visual Studio 6.0 Service Pack 3.

Para obter mais informações sobre service packs do Visual Studio, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
194022O Visual Studio 6.0 service packs, o que, em que, por que
194295Como saber se um service pack do Visual Studio está instalado

Mais Informações

Test1.cpp reproduz o erro C2248 caso 1

   // test1.cpp
   // Compiler options needed: cl /c /GX
   #include <iostream>

   using namespace std;

   #ifdef WORKAROUND
   class CMyClass;
   ostream& operator <<(ostream &, const CMyClass &);
   #endif // WORKAROUND

   class CMyClass
   {
   public:

     friend ostream& operator <<(ostream &, const CMyClass &);
     // An alternative workaround is to define the operator in the
     // class declaration. In this case it is not necessary to forward
     // declare the class and friend function.

   private:

      int value;
   };

   ostream& operator <<(ostream& out, const CMyClass& m)
   {

      int i = m.value;  // C2248 Error
      return out;
   }

   void main()
   { }
				

Test2.cpp reproduz o erro C1001 caso 2

   // test2.cpp
   // Compiler options needed: cl /c /GX
   #include <iostream>

   using namespace std;

   #ifdef WORKAROUND
   int operator+(int, const class &);
   #endif // WORKAROUND

   class CMyClass
   {
   public:

     friend int operator+(int, const CMyClass &);  // C1001 Error.

   };

   void main()
   { }
				

Propriedades

ID do artigo: 192539 - Última revisão: sexta-feira, 7 de outubro de 2005 - Revisão: 3.2
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: 
kbmt kbhotfixserver kbqfe kbqfe kbbug kberrmsg kbfix kblangcpp kbvs600sp3fix KB192539 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: 192539

Submeter comentários

 

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