你目前正处于脱机状态,正在等待 Internet 重新连接

FIX: 您收到错误消息时在"使用的命名空间 std"指令可以位于友元运算符之前

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 192539
本文已归档。它按“原样”提供,并且不再更新。
症状
当在"使用命名空间 std"指令可以位于友元运算符声明之前,您可能会收到下面的两个错误之一:

情况 1
错误 C2248: [成员变量名]: 不能访问私有成员声明中类 [类别名称] [文件名] (行号): [成员变量] 的声明,请参阅
情况 2
[文件名](行号): 致命错误 C1001: 内部编译器错误

(编译器文件 'msc1.cpp 行 1786年)
请选择 Visual c + + 帮助菜单上的技术支持命令,或打开技术支持帮助文件的详细信息。

执行 cl.exe 时出错。
原因
友元运算符解析失败前端的编译器中时引入 std 命名空间。
解决方案
现在提供 Microsoft,受支持的修复程序,但它只用于解决本文所述的问题。仅将它应用于出现这一特定问题的系统。此修补程序可能还会接受进一步的测试。因此,如果此问题没有对您造成严重的影响,我们建议您在 Visual Studio 6.0 包含此修补程序用于等待下一个 Service Pack 3。

要立即解决此问题,请与 Microsoft 产品支持服务以获取此修复程序。有关 Microsoft 产品支持服务电话号码和关于支持费用的信息的完整列表,请访问下面的 Microsoft 网站:注意 在特殊的情况中如果 Microsoft 支持专业人员确定某个特定更新才能解决您的问题,可能会被取消通常会导致支持电话的费用。将正常收取支持费用将应用于其他支持问题和不需要进行专门更新的问题。此修复程序的英文版应具有以下文件属性或更高版本:
   Date      Time      Size        File Name  Version#      Platform   -----------------------------------------------------------------   9/15/98   08:26p    1,183,795   C1xx.dll   12.00.8257.0  (x86)				
替代方法
请执行下列操作以解决此问题之一:
  • 移动在"使用的命名空间 std"指令到朋友运算符声明的后面。
  • 避免使用在"使用的命名空间 std"指令。
  • 向前声明运算符和/或类。
状态
Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的错误。在 Visual Studio 6.0 Service Pack 3 中,此缺陷已得到纠正。

有关 Visual Studio 的服务包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
194022visual 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()   { }				

警告:本文已自动翻译

属性

文章 ID:192539 - 上次审阅时间:12/05/2015 09:16:15 - 修订版本: 3.2

Microsoft Visual C++ 6.0 企业版, Microsoft Visual C++ 6.0 专业版, Microsoft Visual C++, 32-bit Learning Edition 6.0

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbqfe kbbug kberrmsg kbfix kblangcpp kbvs600sp3fix KB192539 KbMtzh
反馈