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

小弟我写的友元,如何访问不了私有成员那?

2012-02-13 
我写的友元,怎么访问不了私有成员那??#includeiostream#includestringusing namespace stdclass Word

我写的友元,怎么访问不了私有成员那??
#include<iostream>
#include<string>

using namespace std;

class WordCount{
friend ostream&
operator<<(ostream&,const WordCount&);

public:
WordCount(string word,int cnt=1){};

private:
string word;
int occurs;
};
ostream& 
operator<<(ostream& os,const WordCount& wd)
{
os<<"<"<<wd.occurs<<">"<<wd.word;
return os;
}

void main()
{
WordCount wd("sadness",12);
cout<<"wd: \n"<<wd<<endl;
}

错误信息:
--------------------Configuration: asdf - Win32 Debug--------------------
Compiling...
a.cpp
D:\b\asdf\a.cpp(20) : error C2248: 'occurs' : cannot access private member declared in class 'WordCount'
  D:\b\asdf\a.cpp(15) : see declaration of 'occurs'
D:\b\asdf\a.cpp(20) : error C2248: 'word' : cannot access private member declared in class 'WordCount'
  D:\b\asdf\a.cpp(14) : see declaration of 'word'
D:\b\asdf\a.cpp(27) : error C2593: 'operator <<' is ambiguous
执行 cl.exe 时出错.

a.obj - 1 error(s), 0 warning(s)

[解决办法]
时不时啊,编译没错 vc6

C/C++ code
 
#include <iostream>
#include <string>

using  namespace  std;

class  WordCount{
friend  ostream&
operator < <(ostream&,const  WordCount&);

public:
WordCount(string  word,int cnt=1){};

private:
string  word;
int  occurs;
};
ostream& 
operator < <(ostream&  os,const  WordCount&  wd)
{
os < < " < " < <wd.occurs < < "> " < <wd.word;
return  os;
}

void  main()
{
WordCount  wd( "sadness ",12);
cout < < "wd:  \n " < <wd < <endl;
}


[解决办法]
那你就用最龌龊的一种方式吧

C/C++ code
class   WordCount{         friend   ostream&         operator <<(ostream&os,const   WordCount&wd)    {         os << " < " <<wd.occurs << "> " <<wd.word;         return   os;     } public:     WordCount(string   word,int cnt=1){};     private:     string   word;     int   occurs; };
[解决办法]
编译是没有错误的,只是你这构造函数相当于没有写。
[解决办法]
WordCount(string word,int cnt=1){
this->word = word;
this->occurs=cnt;
}; 

楼上正确
[解决办法]
真的用
C/C++ code
using std::cout; using std::ostream;using std::endl;using std::string; 

热点排行