我知道如何在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>>
中进行了复制/粘贴错误。
感谢那些使我意识到我的错误的人。