c++ - 运算符<<无法访问类的私有(private)整数

标签 c++ class operator-keyword

我在尝试编译时得到了这个:

../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)

Here你的不工作例子,和here是工作的。


此外,根据 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/

相关文章:

c++ - 创建带有和不带有 new 关键字的 C++ 对象

c++ - 运算符重载友元函数和成员函数

c - 应该吗?运算符被更频繁地使用?

c++ - 如何在c++中使用libcurl将POST发送到elasticsearch

c++ - 是否可以在 .mm 文件中仅使用 C 语法?

c++ - 安卓工作室 : inconsistent automatic including of C++ stdlib headers

C++ 用非静态函数重载静态函数

java - 来自非静态引用错误的非静态方法。简单程序

python - 如果要在 python 中扩展一个类,如何导入另一个类并使用它?

c++ - 重载类函数运算符两次作为 setter 和 getter