Исправление: При получении сообщения при» с использованием пространства имен std "директивы помещается перед оператором друг

Переводы статьи Переводы статьи
Код статьи: 192539
Развернуть все | Свернуть все

В этой статье

Проблема

При "с помощью пространства имен std" директивы помещается перед оператором дружественное объявление, может появиться одно из следующих двух ошибок:

Пример 1
Ошибка C2248: [имя переменной члена]: не доступа закрытого члена, объявленного в классе [имя класса] [имя_файла] (номер строки): см. объявление переменной [элемент]
Случай 2
[имя](номер строки): Неустранимая ошибка C1001: внутренняя ошибка компилятора

(файл компилятора "msc1.cpp", строка 1786)
Выберите в меню справки Visual C++ команду технической поддержки или открыть файл справки технической поддержки для получения дополнительных сведений.

Ошибка при выполнении cl.exe.

Причина

Разрешения оператора друга происходит сбой в компиляторе переднего плана при стандартное пространство имен.

Решение

Корпорация Майкрософт выпустила специальное исправление, предназначенное для устранения этой проблемы.. Это исправление необходимо применять только в тех системах, где наблюдается данная проблема.. Исправление может подвергаться дополнительному тестированию.. Таким образом Если вы не подвержены серьезно эту проблему, рекомендуется дождаться следующего пакета обновления 3 для Visual Studio 6.0, содержащего это исправление.

Чтобы получить данное исправление и решить проблему немедленно, обратитесь в службу технической поддержки Майкрософт.. Полный список телефонов службы поддержки корпорации Майкрософт, а также сведения об условиях обслуживания см. на веб-узле Майкрософт по следующему адресу::
http://support.microsoft.com/contactus/?ws=support
Примечание.В отдельных случаях, если специалистом службы технической поддержки Майкрософт будет определено, что решением проблемы является специально выпущенное исправление, оплата, предусмотренная за обращение в службы технической поддержки, может быть отменена.. Дополнительные услуги по технической поддержке, не связанные с данным исправлением, оплачиваются на стандартных условиях..Английская версия данного исправления содержит версии файлов, приведенные в следующей таблице или более поздние.:
   Date      Time      Size        File Name  Version#      Platform
   -----------------------------------------------------------------

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

Временное решение

Выполните одно из следующих действий, чтобы обойти эту проблему.
  • Переместить "с использованием пространства имен std" директивы после дружественное объявление оператора.
  • Избегайте использования "с помощью пространства имен std" директивы.
  • Вперед объявления оператора и/или класса.

Статус

Данное поведение является подтвержденной ошибкой продуктов Майкрософт, перечисленных в разделе "Информация в данной статье применима к:"..Данная ошибка была исправлена в пакете обновления 3 (SP3) для Visual Studio 6.0..

Для получения дополнительных сведений о пакетах обновления для Visual Studio щелкните следующие номера статей базы знаний Майкрософт:
194022INFO: Общие сведения о пакетах обновления для Visual Studio 6.0
194295Как узнать, что установлен пакет Visual Studio

Дополнительная информация

Test1.cpp воспроизводит ошибка C2248 в случае 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 воспроизводит C1001 ошибки в случае 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()
   { }
				

Свойства

Код статьи: 192539 - Последний отзыв: 15 ноября 2010 г. - Revision: 2.0
Ключевые слова: 
kbhotfixserver kbqfe kbbug kberrmsg kbfix kblangcpp kbvs600sp3fix kbmt KB192539 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:192539

Отправить отзыв

 

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