"for each"和"for_each"之间有什么区别?

4
我接手了一份老代码,需要使用JNI调用。在代码中,我看到了for each( in )的用法,但是这段代码无法在Linux下编译。
我真的想知道for each是如何生成的,哪些平台可以使用,在Linux下编译时是否有任何问题?
我试图理解for each的语法,但这些信息几乎不可能找到,但有很多for_each的用法。
在Windows平台上,我只使用了Visual Studio 2013(v120)成功编译,而v14之后的版本异常。
在Linux平台下,我使用以下命令进行编译,但是它抛出了很多错误。结果如下:
g++ -I/usr/java/jdk1.8.0_191/include/ -I/usr/java/jdk1.8.0_191/include/linux/ -fPIC -shared -o ErmjJNI.so *.cpp -pthread -std=c++11

ErmjAI.cpp: In member function ‘virtual void ErmjAI::initGame(size_t, size_t, const std::vector<std::vector<int> >&, std::string, std::string)’:
ErmjAI.cpp:74:8: error: expected ‘(’ before ‘each’
    for each (size_t tile in tiles[i])
        ^
ErmjAI.cpp:74:21: error: expected primary-expression before ‘tile’
    for each (size_t tile in tiles[i])
                     ^
ErmjAI.cpp:74:37: error: ‘each’ was not declared in this scope
    for each (size_t tile in tiles[i])
                                     ^
ErmjAI.cpp:75:4: error: expected ‘;’ before ‘{’ token
    {
    ^
ErmjAI.cpp:3346:1: error: expected primary-expression at end of input
 }

我已查询相关API(http://www.cplusplus.com/search.do?q=for+each),但没有获得收益。
有很多这样的代码,我已经失去了耐心,以下列出了一些示例。
for each (size_t tile in tiles[i])
{
    if (tile<=33)
    {
        tNum[tile]++;
        _unseen_tiles_num[tile]--;
    }
    else
    {
        m_vecHua[i].push_back(tile);
    }
}
  • 我渴望知道如何在Linux下编译for each语法。
  • 我想了解for each的历史和使用平台。
  • 我想更深入地了解该语法,而不是像现在这样提问。

2
使用 #define each#define in :,你可能可以让它运行起来,但我担心它会破坏其他代码。;-) - Scheff's Cat
逐个替换是危险的,#define 也是如此。 - HuLu
2个回答

6

for each, in是微软编译器中的非标准语法,即使他们也不建议使用。我建议您将代码更改为使用C++11基于范围的for循环。这将得到符合标准的编译器的支持。

for (size_t tile : tiles[i])
{
    // your code
}

0
for each (size_t tile in tiles[i])

看起来不像C++,请将其更改为:

for (size_t tile : tiles[i])

你也可以阅读有关 C++ 中范围 for 循环的工作原理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接