As *_* As 83 c++ iostream operator-overloading
啊
#include "logic.h"
...
class A
{
friend ostream& operator<<(ostream&, A&);
...
};
Run Code Online (Sandbox Code Playgroud)
logic.cpp
#include "a.h"
...
ostream& logic::operator<<(ostream& os, A& a)
{
...
}
...
Run Code Online (Sandbox Code Playgroud)
当我编译时,它说:
std :: ostream&logic :: operator <<(std :: ostream&,A&)'必须只接受一个参数.
问题是什么?
Cat*_*lus 115
问题是你在类中定义了它
a)表示第二个参数是implicit(this)和
b)它不会做你想做的事,即延伸std::ostream.
您必须将其定义为自由函数:
class A { /* ... */ };
std::ostream& operator<<(std::ostream&, const A& a);
Run Code Online (Sandbox Code Playgroud)
Jon*_*ely 48
友元函数不是成员函数,因此问题是您声明operator<<为以下的朋友A:
friend ostream& operator<<(ostream&, A&);
Run Code Online (Sandbox Code Playgroud)
然后尝试将其定义为类的成员函数 logic
ostream& logic::operator<<(ostream& os, A& a)
^^^^^^^
Run Code Online (Sandbox Code Playgroud)
您是否logic是类或命名空间?
这个错误是因为你试图定义一个带有operator<<两个参数的成员,这意味着它需要三个参数,包括隐含this参数.运算符只能接受两个参数,因此当你写a << b两个参数时,a和b.
你想定义ostream& operator<<(ostream&, const A&)为一个非成员函数,绝对不是一个成员,logic因为它与该类无关!
std::ostream& operator<<(std::ostream& os, const A& a)
{
return os << a.number;
}
Run Code Online (Sandbox Code Playgroud)