REVISIÓN: Recibe mensaje de error cuando un "using namespace std" directiva se coloca antes de operador de amigo

Seleccione idioma Seleccione idioma
Id. de artículo: 192539 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando un "using namespace std" directiva aparecerá antes de una declaración de operador amigo, puede recibir uno de los dos errores siguientes:

caso 1
Error C2248: [nombre de variable de miembro]: no se puede miembro privado de acceso declarado en la clase [nombre de clase] [nombre de archivo] (número de línea): vea la declaración de [variable miembro]
caso 2
[nombre de archivo](número de línea): error grave C1001: ERROR interno del compilador

(archivo de compilador 'msc1.cpp', línea 1786)
Elija el comando soporte técnico en el menú Ayuda de Visual C++ o abra el archivo de Ayuda de soporte técnico para obtener más información.

Error al ejecutar cl.exe.

Causa

La resolución de operador amigo produce un error en el compilador de aplicaciones para usuario cuando se introduce el espacio de nombres std.

Solución

Ahora hay disponible un hotfix para el que Microsoft proporciona soporte técnico, pero que sólo se diseñó para corregir el problema descrito en este artículo. Aplíquelo sólo a sistemas que experimenten este problema específico. Este hotfix puede ser sometido a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere el siguiente Service Pack 3 de Visual Studio 6.0 que contenga este hotfix.

Para resolver este problema inmediatamente, póngase en contacto con soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de los servicios de soporte técnico de Microsoft e información acerca de los costos de soporte, visite el siguiente sitio Web:
http://support.microsoft.com/contactus/?ws=support
Nota en casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.La versión en inglés de esta revisión debe tener los atributos de archivo siguientes o posteriores:
   Date      Time      Size        File Name  Version#      Platform
   -----------------------------------------------------------------

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

Solución

Siga uno de los procedimientos siguientes para evitar este problema:
  • Mover el "using namespace std" directiva después de la declaración de operador de amigo.
  • Evite el uso de la "using namespace std" directiva.
  • Declarar hacia delante el operador o la clase.

Estado

Microsoft ha confirmado que se trata de un error de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".Este error se corrigió en Visual Studio 6.0 Service Pack 3.

Para obtener más información acerca de los de Visual Studio service Pack, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
194022Service Pack de Visual Studio 6.0: qué son, dónde están y por qué son necesarios
194295Cómo saber que está instalado un service pack de Visual Studio

Más información

Test1.cpp reproduce el error C2248 en 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 reproduce el error C1001 en 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()
   { }
				

Propiedades

Id. de artículo: 192539 - Última revisión: viernes, 07 de octubre de 2005 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft Visual C++ 6.0 Enterprise
  • Microsoft Visual C++ 6.0 Professional
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palabras clave: 
kbmt kbhotfixserver kbqfe kbqfe kbbug kberrmsg kbfix kblangcpp kbvs600sp3fix KB192539 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 192539

Enviar comentarios

 

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