二进制表达式的操作数无效("ostream"(又名"basic_ostream<char>")和"ostream")

invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and 'ostream')

本文关键字:ostream lt char gt 又名 表达式 操作数 无效 basic 二进制      更新时间:2023-10-16

我正在尝试做

cout << Print(cout); 但是,编译时存在"二进制表达式('ostream'(又名'basic_ostream')和'ostream')的无效操作数"错误。

#include <iostream>
using namespace std;
ostream& Print(ostream& out) {
  out << "Hello World!";
  return out;
}
int main() {
  cout << Print(cout);
  return 0;
}

为什么这不起作用?我该如何解决这个问题?谢谢!!

您可能

正在寻找的语法是std::cout << Print << " and hello again!n"; 。函数指针被视为操纵器。内置operator <<将指针指向Print并使用 cout 调用它。

#include <iostream>
using namespace std;
ostream& Print(ostream& out) {
  out << "Hello World!";
  return out;
}
int main() {
  cout << Print << " and hello again!n";
  return 0;
}

这是您的第二个请求:

#include <iostream>
#include <vector>
#include <iterator>
template <class Argument>
class manipulator
{
private:
    typedef std::ostream& (*Function)(std::ostream&, Argument);
public:
    manipulator(Function f, Argument _arg)
        : callback(f), arg(_arg)
    { }
    void do_op(std::ostream& str) const
    {
        callback(str, arg);
    }
private:
    Function callback;
    Argument arg;
};
template <class T>
class do_print : public manipulator<const std::vector<T>&>
{
public:
    do_print(const std::vector<T>& v)
        : manipulator<const std::vector<T>&>(call, v) { }
private:
    static std::ostream& call(std::ostream& os, const std::vector<T>& v)
    {
        os << "{ ";
        std::copy(v.begin(), v.end(),
                     std::ostream_iterator<T>(std::cout, ", "));
        return os << "}";
    }
};
template <class Argument>
std::ostream& operator<<(std::ostream& os, const manipulator<Argument>& m)
{
    if (!os.good())
        return os;
    m.do_op(os);
    return os;
}
template<class T>
do_print<T> Print(const std::vector<T>& v)
{
    return do_print<T>(v);
}
int main()
{
    std::vector<int> v{1, 2, 3};
    std::cout << Print(v);
}