无法将 std::cout 传递给 ostream&constructor

Cannot pass std::cout to ostream& constructor

本文关键字:ostream constructor cout std      更新时间:2023-10-16

我试图创建通用流类持有者,但似乎无法将std::cout传递给它,代码:

#include <iostream>
struct x
{
    std::ostream &o;
    x(std::ostream &o):o(o){}
};
int main()
{
    x(std::cout);
    x.o<<"Hin";
    return 0;
}

编译为时失败

c++ str.cc -o str -std=c++11
str.cc: In function ‘int main()’:
str.cc:11:14: error: invalid use of qualified-name ‘std::cout’
str.cc:12:4: error: expected unqualified-id before ‘.’ token

为什么?

x(std::cout);

相当于

x std::cout;

它试图声明一个称为CCD_ 2的局部变量。这是不允许的。

如果您想声明x类型的变量,并将std::cout传递给其构造函数,那么这就是

x x(std::cout);

不过,为了您的理智起见,最好为类赋予一个不同的名称(并更改下面的行以使用该名称)。

使用:

int main()
{
    x object(std::cout);
    object.o << "Hin";
    return 0;
}