我试图重载操作符以对项类进行操作并因字符串而有一些困难。这将分为标题和另一个文件。 (编辑:哎呀,对不起。)
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <string>
using namespace std;
class item
{
private:
string itemName;
public:
string getitemName() const;
friend std::istream &operator >> (std::istream & instr, const item& R);
friend std::ostream &operator << (std::ostream & outst, const item& P);
};
string item::getitemName() const
{
return itemName;
}
std::istream& operator >> (std::istream& instr, const item& R)
{
instr >> R.getitemName();
return instr;
}
std::ostream& operator << (std::ostream& outst, const item& P)
{
outst << P.getitemName();
return outst;
}
答案 0 :(得分:3)
&gt;&gt;运算符将改变item
,因此必须传递对mutable的引用,而不是const。
item
已宣布流媒体运营商为朋友,因此他们可以自由地访问内部州。
-
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <string>
using namespace std;
class item
{
private:
string itemName;
public:
friend std::istream &operator >> (std::istream & instr, item& R);
friend std::ostream &operator << (std::ostream & outst, const item& P);
};
std::istream& operator >> (std::istream& instr, item& R)
{
instr >> R.itemName;
return instr;
}
std::ostream& operator << (std::ostream& outst, const item& P)
{
outst << P.itemName;
return outst;
}
答案 1 :(得分:1)
使用getItemName()
您获得的是值,而不是对它的引用
你正在做类似
instr>>"hello"
这是没有任何意义的,因为“你好”,就像getItemName()
的结果是rvalue
一样。
你应该这样做:
std::istream& operator >> (std::istream& instr, const item& R){
instr >> R.itemName;
return instr;
}
该方法是friend
,因此它可以毫无问题地访问您的私人成员!
有关rvalues
和lvalues
的详情,请查看here