即使在类中已将Operator <<和>>声明为好友,它也无法正常工作

时间:2019-05-26 12:09:18

标签: c++ operator-keyword friend protected

我知道如何在C ++中重载<<>>运算符,而且通常没有问题。但是这一次,我无法找出导致此错误的原因。

我创建了一个名为monad的简单类,并在将两个运算符声明为friend函数的同时重载了这两个运算符。

问题是编译器无法识别“友谊”,并继续说该类的成员受到保护。

我搜索了,没有任何帮助。我根本不知道我的代码有什么问题。

我正在使用Dev-C ++ 5.11。

我尝试使用全局命名空间std,但仍然无法正常工作。

// monad.h

#ifndef MONAD_H
#define MONAD_H
#include <iostream>
#include <string>

class monad;

class monad
{
    public:
        monad();
        friend std::ostream& operator<<(std::ostream&,monad&);
        friend std::istream& operator>>(std::istream&,monad&);
    protected:
        float AP;
        float LP;
        float PP;

};

#endif

// monad.cpp

#include "monad.h"

monad::monad()
{
    AP=1;
    LP=20;
    PP=10;

}

std::ostream& operator<<(std::ostream& out, monad& m){
    out<<m.AP<<" "<<m.LP<<" "<<m.PP<<" ";
    return out;
}

std::istream& operator<<(std::istream& in, monad& m){
    in>>m.AP>>m.LP>>m.PP;
    return in;
}
  

在monad.cpp包含的文件中

     

在函数'std :: istream&运算符<<(std :: istream&,monad&)':

     

'float monad :: AP'受保护

     

[错误]在此上下文中   

它继续向我显示其他成员的此错误。

更新:

错误是因为 我在const的声明和实现中忘记了monad&之前的operator<<。我在cpp文件的operator>>中进行了复制/粘贴错误。

感谢那些使我意识到我的错误的人。

0 个答案:

没有答案