C++ 运算符<<类的成员
c++ operator<< member of class
我有&lt;&lt;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
上有ERRO
错误描述是
错误C2679:二进制'&lt;&lt;':没有发现右手的操作员 类型" compo"的操作数(或没有可接受的转换)
和一个警告,
返回本地变量或临时变量的地址
ho我需要对此作品进行更改。
您需要声明独立输出操作员方法来执行此操作(免费类功能)。
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;
}
IMHO我在这里提出的第一个解决方案是更灵活的解决方案,最终满足了未来的要求。它可以与不处理弦乐格式的std::ostream
实现一起使用。
您需要类似此操作员的东西:
ostream& operator << (ostream& o, const Compo& c)
{
return o << c.GetAsString();
}
编译器找不到任何操作员&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;
}
#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;
}
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 嵌套在类中时无法设置成员数据
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- C++分离成员流重载<<
- 重载运算符<<输出地址而不是数据成员