为什么我得到错误"'cout'在命名空间'std'中没有命名类型"当我使用"使用cout = std :: cout;"?

Sta*_*zek 3 c++ using c++11 type-alias

我正在尝试使用更短的语法并避免std::在任何地方使用,所以我开始使用新的别名语法.在某些例子中,我看到人们以这种方式使用它:

using json = nlohmann::json;
Run Code Online (Sandbox Code Playgroud)

并尝试使用std::,但代码如下:

#include <iostream>

using cout = std::cout;

int main()
{
    cout << "Sometext";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我得到错误'cout' in namespace 'std' does not name a type.我知道我可以使用

using std::cout;
Run Code Online (Sandbox Code Playgroud)

但为什么using cout = std::cout;不起作用?

编辑:

所有投票结束这个问题的人:我发布了它,因为我无法找到解决方案,通过写错误信息.是的,提到的问题是解决我的问题的问题描述了会发生什么,但是当有人遇到这种错误时,他将无法轻易找到解决方案.我只是没有意识到,那cout是一个对象.我已经读过这样的一些问题,但仍然不知道会发生什么.

son*_*yao 16

using cout = std::cout;指的是类型别名声明语法.它类似于typedef; 所以你试图声明一个名为cout引用先前定义的类型的类型std::cout.但std::cout它不是类型名称,它是类型为的对象std::ostream.

正如错误消息所说,它只是试图告诉你std::cout不引用类型名称.

  • `static auto&cout = std :: cout;`的效果几乎与OP尝试的无法区分,并且允许使用不同的名称. (2认同)