我的<<<<< C ++中的运算符。我需要这个操作工作:
cout << comp2 << comp1;
class Compo
{
string name;
int power;
string app;
public:
Compo(string s, string a, int p):name(s), power(p),app(a){};
//~Compo();
string GetAsString()const{
ostringstream oss;
oss << name << " [ " << power << " ] desc: " << app << endl;
return oss.str();
};
string &operator<<(Compo& aux)const{
return aux.GetAsString();
};
};
void main()
{
Compo comp1("Pencil","Best",12);
Compo comp2("Notes","Not Best",22);
cout << comp2 << comp1;
cin.get();
}
我在cout << comp2
错误描述是,
错误C2679:二进制'&lt;&lt;' :找不到哪个操作员需要右手 'Compo'类型的操作数(或没有可接受的转换)
和一个警告,
返回局部变量的地址或临时
我需要改变这项工作。
答案 0 :(得分:1)
您需要声明一个独立的输出运算符方法来执行此操作(无类函数)。
std::ostream& operator<<(std::ostream& os, const Compo& obj)
{
obj.put(os);
return os;
}
在班级Compo
中有:
// ...
public:
void put(std::ostream& os) const
{
// output member values here ...
}
// ...
<强>更新强>
或者(如果您实际上无法更改Comp
):
std::ostream& operator<<(std::ostream& os, const Compo& obj)
{
os << obj.GetAsString();
return os;
}
恕我直言,我在这里提出的第一个解决方案是更灵活的解决方案,最终满足未来的需求。它可能与std::ostream
的实现一起使用,它们不处理stringyfied格式。
答案 1 :(得分:0)
编译器找不到任何运算符&lt;&lt;它采用左参数std::ostream
和右参数Compo
。您定义了一个作为左参数std::string
和右参数Compo
的参数。
尝试:
class Compo{
//Stuff
public:
friend ostream& operator<<(ostream& os, Compo& aux);
};
ostream& operator<<(ostream& o, const Compo& aux)
{
o << name << " [ " << power << " ] desc: " << app << endl;
return o;
}
答案 2 :(得分:0)
你需要这样的操作符:
ostream& operator << (ostream& o, const Compo& c)
{
return o << c.GetAsString();
}
答案 3 :(得分:0)
#include <iostream>
using namespace std;
class Compo
{
string name;
int power;
string app;
public:
friend ostream& operator<< (ostream&, const Compo&);
....
.....
};
ostream& operator<< (ostream& out, const Compo& c)
{
out << c.name << "[" << c.power << " ] desc: " << c.app << endl;
}