我写的友元,怎么访问不了私有成员那??
#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
#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;
}
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;
};
楼上正确
[解决办法]
真的用
using std::cout; using std::ostream;using std::endl;using std::string;