我接管了一个旧代码,需要使用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
}
我已经在此(http://www.cplusplus.com/search.do?q=for+each)网站上查询了相关的API,但没有任何帮助。
有太多这样的代码,我已经失去耐心了,下面列出了一些示例。
for each (size_t tile in tiles[i])
{
if (tile<=33)
{
tNum[tile]++;
_unseen_tiles_num[tile]--;
}
else
{
m_vecHua[i].push_back(tile);
}
}
for each
语法。for each
的历史和使用平台。答案 0 :(得分:6)
for each, in
是Microsoft编译器中的非标准语法,即使他们不建议使用。我建议您更改代码以使用C ++ 11 ranged-based for循环。符合标准的编译器将对此提供支持。
for (size_t tile : tiles[i])
{
// your code
}
答案 1 :(得分:0)
for each (size_t tile in tiles[i])
看起来不像C ++,将其更改为:
for (size_t tile : tiles[i])
您还可以official docs在C ++中基于范围的工作方式。