【问题标题】:Why do I get error "'cout' in namespace 'std' does not name a type" when I use "using cout = std::cout;"?当我使用“using cout = std::cout;”时,为什么会出现错误“'cout' in namespace 'std' does not name a type”?
【发布时间】:2018-06-22 08:09:00
【问题描述】:

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

using json = nlohmann::json;

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

#include <iostream>

using cout = std::cout;

int main()
{
    cout << "Sometext";
    return 0;
}

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

using std::cout;

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

编辑:

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

【问题讨论】:

  • 没有 cmets 的拒绝投票违反了新规则,如下所述:stackoverflow.blog/2018/04/26/… 再次,请对此发表评论。我真的很想让它变得更好。
  • @Staszek 另外,该博文中没有描述新的规则,人们仍然可以随意投反对票
  • @Staszek 这是一篇博文,而不是新规则(甚至几乎没有资格作为新规则提案)
  • @Staszek 不,不是,友好的政策包括 1) 粗鲁和贬低语言是不行的。 2) 热情好客,要有耐心,并保持良好的意愿。 3)不要做一个混蛋。那篇博文也得到了一个相当糟糕的rep from a lot of people,你不一定会得到很多支持

标签: c++ c++11 using type-alias


【解决方案1】:

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

正如错误消息所说,它只是想告诉您std::cout 不是指类型名称。

【讨论】:

  • static auto&amp; cout = std::cout; 的效果与 OP 尝试的效果几乎没有区别,并且允许使用不同的名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
  • 2017-08-20
相关资源
最近更新 更多