CORRECÇÃO: Recebe erro mensagem quando um "utilizando o espaço de nomes padrão" directiva é colocada antes do operador de amigo

Traduções de Artigos Traduções de Artigos
Artigo: 192539 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando um "utilizando o espaço de nomes padrão" directiva é colocada antes de uma declaração de operador amigo, poderá receber um dos seguintes dois erros:

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

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

Erro ao executar cl.exe.

Causa

A resolução de operador amigo falha no compilador front-end quando o espaço de nomes do desvio padrão é introduzido.

Resolução

Agora é disponibilizada pela Microsoft uma correcção suportada, mas destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em sistemas que tenham este problema específico. Esta correcção poderá submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde o próximo Service Pack 3 para Visual Studio 6.0 que contenha esta correcção.

Para resolver este problema imediatamente, contacte o suporte técnico da Microsoft para obter a correcção. Para obter uma lista completa de números de telefone do suporte técnico da Microsoft e informações sobre os custos de suporte, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota Em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados, se um técnico de suporte da Microsoft determinar que uma actualização específica resolverá o problema. Os custos normais do suporte serão aplicados a problemas adicionais e questões de suporte que não se enquadrem na atualização específica em questão.A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro 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

Efectue um dos seguintes passos para contornar este problema:
  • Mover o "utilizando o espaço de nomes padrão" directiva após a declaração de operador amigo.
  • Evite utilizar o "utilizando o espaço de nomes padrão" directiva.
  • Frente declare o operador e/ou classe.

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos do Microsoft listados na secção "Aplica-se a".Este erro foi corrigido no Visual Studio 6.0 Service Pack 3.

Para obter mais informações sobre service packs do Visual Studio, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
194022Visual Studio 6.0 service packs, o que, em que, por que razão
194295Como saber que um Visual Studio service pack está instalado

Mais Informação

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

Artigo: 192539 - Última revisão: 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 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: 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