Visual Studio告诉我这个for循环是不正确的。 错误消息是:
- 键入bool unexpected
- ok是未声明的标识符
- 失踪;之前}
的相关信息:
-recordset.Select返回一个long -MoveNext一个bool
for (size_t i = 0, bool ok = recordset.Select(Adress::getSQLStatement() + "Where A05.recid = %ld", i); ok; ok = recordset.MoveNext(), i++) {
at(i).Save(recordset);
}
答案 0 :(得分:6)
正如 StenSoft 所说。但是你可以在循环第一个语句中定义一个匿名结构,并初始化它。
#include <iostream>
using namespace std;
int main() {
for (struct {size_t i; bool ok;} s = {0, true}; s.ok; ++s.i) {
s.ok = s.i < 10;
cout << s.i;
}
return 0;
}
但是恕我直言,while it works,它比它的价值更麻烦。更好地重组您的代码。
答案 1 :(得分:2)
首先,您当然可以像这样重写循环:
{
bool ok = recordset.Select(...);
for (std::size_t i = 0; ok; ok = recordset.MoveNext(), ++i)
{
/* ... */
}
}
但这里的元课是几乎所有循环都是for
- 循环,当你认为你的结构不同时,再想一想。可能会在for
- 循环方面进行重写,使您的逻辑更清晰。您目前的代码并没有将初始错误与&#34;没有更多记录区分开来。错误以后。使用新代码,现在明确可能:
if (bool ok = recordset.select(...))
{
for (std::size_t i = 0; ok; ok = recordset.MoveNext(), ++i) { /* ... */ }
}
else
{
// handle initial error
}
我甚至可能摆脱多余的ok
变量:
if (recordset.select(...))
{
for (std::size_t i = 0; ; ++i)
{
/* ... */
if (!recordset.MoveNext()) break;
}
}
else
{
// handle initial error
}