首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于友员的一个奇怪的有关问题

2012-02-24 
关于友员的一个奇怪的问题//下面是文件person.h的内容#ifndef_PERSON_H_#define_PERSON_H_classScreen/*c

关于友员的一个奇怪的问题
//下面是文件   person.h的内容

#ifndef   _PERSON_H_
#define   _PERSON_H_

class   Screen;

/*   class   Person   */
class   Person
{
public:
Person(string   strName,   string   strAddress)
{
m_name   =   strName;
m_address   =   strAddress;
}
Person(){}
~Person(){}

string   GetName(void)   const
{
return   m_name;
}

string   GetAddress(void)   const
{
return   m_address;
}
friend   ostream&   operator < <(ostream&,   const   Person&);

private:
string   m_name;
string   m_address;
Screen   *m_Pscreen;

};
#endif
/*   EOF   */


/****************************************************************/
//下面的内容是main.cpp
#include   <iostream>
#include   <string>
#include   <vector>

using   namespace   std;

#include   "person.h "

ostream&   operator   < <   (ostream&   out,   const   Person&   MyPerson)
{
out   < <   MyPerson.m_name   < <   endl;
return   out;
}


void   main(void)
{
Person   p1( "hhhhh ",   "54354 ");
cout < <   p1   < <   endl;
}


问题:
编译后出现
error   C2248:   'm_name '   :   cannot   access   private   member   declared   in   class   'Person '

error   C2593:   'operator   < < '   is   ambiguous


但假如将person.h中的
friend   ostream&   operator < <(ostream&,   const   Person&);
改成         friend   ostream&   operator < <(ostream&,Person&);
只会出现第1个错误

为什么会出现这样的情况呢,还有,为什么这里不能访问私有成员呢,
是不是名字空间的问题.


[解决办法]
这是vc6.0的bug,请看:http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q192/5/39.asp&NoWebContent=1

解决办法有两个:
1、下载sp6,地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=A8494EDB-2E89-4676-A16A-5C5477CB9713&displaylang=en
2、不要使用 using namespace std 及类似的语句!这样在代码中使用std中的类时就得完全限定之了。如:把ostream改成std::ostream。

热点排行