CORRECTIF : Vous recevez message d'erreur lorsqu'un «using namespace std "directive est placée avant ami opérateur

Traductions disponibles Traductions disponibles
Numéro d'article: 192539 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Symptômes

Lorsqu'un "using namespace std" directive est placée avant une déclaration d'opérateur ami, vous risquez d'obtenir une des deux erreurs suivantes :

Cas 1
erreur C2248: [nom de la variable de membre]: ne peut pas l'accès privé membre déclaré (e) dans la classe [nom de classe] [nom de fichier] (numéro de ligne): voir la déclaration de [variable membre]
Cas n ° 2
[nom de fichier](numéro de ligne): erreur fatale C1001 : erreur interne du compilateur

(fichier compilateur 'msc1.cpp', ligne 1786)
Choisissez la commande de support technique dans le menu aide de Visual C++ ou ouvrir le fichier d'aide support technique pour plus d'informations.

Erreur lors de l'exécution de cl.exe.

Cause

La résolution de l'opérateur ami ne fonctionne pas dans le compilateur frontal lorsque espace de noms std est introduit.

Résolution

Un correctif pris en charge est désormais disponible auprès de Microsoft, mais il ne vise qu'à corriger le problème décrit dans cet article. Uniquement l'appliquer aux systèmes rencontrant ce problème spécifique. Ce correctif peut subir des tests supplémentaires. Par conséquent, si vous n'êtes pas sérieusement concerné par ce problème, nous vous recommandons d'attendre le prochain Service Pack 3 pour Visual Studio 6.0 qui comprendra ce correctif.

Pour résoudre ce problème immédiatement, contactez le support technique Microsoft pour obtenir le correctif. Pour obtenir une liste complète des numéros de téléphone de support technique Microsoft et des informations sur les frais de support technique, reportez-vous au site Web de Microsoft à l'adresse suivante :
http://support.microsoft.com/contactus/?ws=support
Remarque Dans des cas particuliers, frais généralement encourus de support technique par téléphone vous seront facturés si un technicien du support technique Microsoft détermine qu'une mise à jour spécifique peut résoudre votre problème. Les coûts habituels du support technique s'appliqueront aux questions supplémentaires et aux problèmes qui ne relèvent pas de la mise à jour en question.La version anglaise de ce correctif doit avoir les attributs de fichier suivants ou ceux d'une version ultérieure :
   Date      Time      Size        File Name  Version#      Platform
   -----------------------------------------------------------------

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

Contournement

Effectuez l'une des méthodes suivantes pour contourner ce problème :
  • Déplacer le "utilisation d'espace de noms std" directive après la déclaration d'opérateur friend.
  • Évitez d'utiliser le «using namespace std "directive.
  • Vers l'avant de déclarer l'opérateur et/ou de la classe.

Statut

Microsoft a confirmé l'existence de ce bogue dans les produits Microsoft répertoriés dans la section "S'applique à".Ce bogue a été corrigé dans Visual Studio 6.0 Service Pack 3.

Pour plus d'informations sur les service packs Visual Studio, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la base de connaissances Microsoft :
194022Visual Studio 6.0 service packs, quoi, où, pourquoi
194295Comment faire pour savoir qu'un service pack Visual Studio est installé

Plus d'informations

Test1.cpp reproduit l'erreur C2248 dans cas 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 reproduit l'erreur C1001 dans cas 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()
   { }
				

Propriétés

Numéro d'article: 192539 - Dernière mise à jour: vendredi 7 octobre 2005 - Version: 3.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C++ 6.0 Édition Entreprise
  • Microsoft Visual C++ 6.0 Édition Professionnelle
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Mots-clés : 
kbmt kbhotfixserver kbqfe kbqfe kbbug kberrmsg kbfix kblangcpp kbvs600sp3fix KB192539 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 192539
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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