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

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

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

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

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

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

Чтобы получить данное исправление и решить проблему немедленно, обратитесь в службу технической поддержки Майкрософт.. Полный список телефонов службы поддержки корпорации Майкрософт, а также сведения об условиях обслуживания см. на веб-узле Майкрософт по следующему адресу::Примечание.В отдельных случаях, если специалистом службы технической поддержки Майкрософт будет определено, что решением проблемы является специально выпущенное исправление, оплата, предусмотренная за обращение в службы технической поддержки, может быть отменена.. Дополнительные услуги по технической поддержке, не связанные с данным исправлением, оплачиваются на стандартных условиях..Английская версия данного исправления содержит версии файлов, приведенные в следующей таблице или более поздние.:
   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 — последний просмотр: 12/05/2015 09:16:13 — редакция: 2.0

  • kbnosurvey kbarchive kbhotfixserver kbqfe kbbug kberrmsg kbfix kblangcpp kbvs600sp3fix kbmt KB192539 KbMtru
Отзывы и предложения