问题 什么是“错误:不能使用类型'void'作为范围”实际上是什么意思?


当我在clang 3.2中编译它时

for(auto x : {1, 1.2}){}

我收到这样的错误:

错误:不能使用类型'void'作为范围

这是什么意思?


4806
2018-05-09 13:47


起源



答案:


您在初始化列表中混合了类型。在这种情况下,它可以很清楚,但不要忘记

std::string foo;
for(auto x : {foo, "bar"}){}

也是2种不同的类型。当然还有很多其他情况可能会让你觉得它有效,但类型必须完全匹配。


14
2018-05-09 13:47



您是如何/为何直接回答自己的问题?或者SE对我来说很奇怪 - Mike Vine
@MikeVine:据推测,因为错误信息令人困惑,以至于他认为其他人可能会从中得到解释。回答你自己的(明智的)问题并没有错。 - Mike Seymour
@MikeVine是的,其他迈克说。 SO可以选择这样做,我在网站上找不到副本,所以我觉得如果有人想知道这个,这将是一个很好的补充。 :) - Nick
大。这正是我想知道的。 - xis


答案:


您在初始化列表中混合了类型。在这种情况下,它可以很清楚,但不要忘记

std::string foo;
for(auto x : {foo, "bar"}){}

也是2种不同的类型。当然还有很多其他情况可能会让你觉得它有效,但类型必须完全匹配。


14
2018-05-09 13:47



您是如何/为何直接回答自己的问题?或者SE对我来说很奇怪 - Mike Vine
@MikeVine:据推测,因为错误信息令人困惑,以至于他认为其他人可能会从中得到解释。回答你自己的(明智的)问题并没有错。 - Mike Seymour
@MikeVine是的,其他迈克说。 SO可以选择这样做,我在网站上找不到副本,所以我觉得如果有人想知道这个,这将是一个很好的补充。 :) - Nick
大。这正是我想知道的。 - xis