我在尝试编译时得到了这个:
../Monster.h:26:9: error: ‘int ProjectIV::Monster::con’ is private
`int con;` ^
../Monster.cpp:17:39: error: within this context
cout << "Constitution: " << monster.con << endl;
^make: * [Monster.o] Error 1
据我了解制作运算符<<一个 friend 应该允许它访问int con。我没看到什么。
怪物.h:
#ifndef MONSTER_H_
#define MONSTER_H_
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
#include <string>
using std::string;
namespace ProjectIV
{
class Monster
{
friend ostream &operator<< (ostream &out, const Monster &monster);
public:
Monster(int con);
private:
int con;
};
} /* namespace ProjectIV */
#endif /* MONSTER_H_ */
怪物.cpp:
#include "Monster.h"
ostream &operator<< (ostream &out, const ProjectIV::Monster &monster)
{
cout << "Constitution: " << monster.con << endl;
return out;
}
ProjectIV::Monster::Monster(int con): con(con)
{}
主要.cpp:
#include "Monster.h"
using namespace ProjectIV;
int main()
{
Monster Gojira(140);
cout << Gojira << endl;
return 0;
}
最佳答案
这个:
ostream& operator<<(ostream& out, const ProjectIV::Monster& monster)
应该是:
ostream& ProjectIV::operator<<(ostream& out, const ProjectIV::Monster& monster)
此外,根据 AndreyT的评论,你应该在 friend
声明之前添加一个函数声明:
namespace ProjectIV {
class Monster {
friend ostream& operator<<(ostream& out, const Monster& monster);
public:
Monster(int con);
private:
int con;
};
ostream& operator<<(ostream& out, const Monster& monster);
// ^^^ this
}
关于c++ - 运算符<<无法访问类的私有(private)整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493094/