读书人

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

发布时间: 2012-02-13 17:20:26 作者: rapoo

我写的友元,怎么访问不了私有成员那??
#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; 

读书人网 >C++

热点推荐