无法将std :: cout传递给ostream&构造函数

时间:2015-03-23 17:56:20

标签: c++ cout

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

#include <iostream>

struct x
{
    std::ostream &o;
    x(std::ostream &o):o(o){}
};

int main()
{
    x(std::cout);
    x.o<<"Hi\n";
    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

为什么?

2 个答案:

答案 0 :(得分:6)

x(std::cout);

相当于

x std::cout;

尝试声明一个名为std::cout的局部变量。这是不允许的。

如果你想声明一个x类型的变量,将std::cout传递给它的构造函数,那就是

x x(std::cout);

尽管为了您的理智,最好给它一个不同的名称(并更改以下行以使用该名称)。

答案 1 :(得分:1)

使用:

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