class point //declaration of class
{
private:
int x, y;
friend std::ostream &operator << (std::ostream &input, point &p);
public:
//constructors and some other methods
};
//definition of overloading <<
std::ostream &operator << (std::ostream &input, point &p)
{
input << std::cout << "x = " << p.x << " y = " << p.y << " ";
return input;
}
它可以工作,但是当我使用它时
std::cout << object;
它在我的文字前显示了一些垃圾:
062ACC3E8x = 1 y = 22
所以062ACC3E8X总会出现。如果我重新启动我正在处理的Visual Studio,这是不同的,所以我想它是一些内存地址。如何摆脱它?我的代码中是缺少还是错误的?
答案 0 :(得分:3)
您输出了一些地址,因为std::ostream
有implicit void* conversion operator。
1)如果fail()返回true,则返回空指针,否则返回a 非空指针。这个指针可以隐式转换为bool和 可以在布尔上下文中使用。
应该只是
input << "x = " << p.x << " y = " << p.y << " ";
答案 1 :(得分:1)
您正在将std::cout
传递到输出流中。将您的代码更改为:
//definition of overloading <<
std::ostream &operator << (std::ostream &input, point &p)
{
input << "x = " << p.x << " y = " << p.y << " ";
return input;
}