我有一个字典的代码。
void Dictionary::translate(char out_s[], const char s[])
{
for (int i=0;i<numEntries;i++)
{
if (strcmp(englishWord[i], s)==0)
break;
}
if (i<numEntries)
strcpy(out_s, elvishWord[i]);
这给了我错误name lookup of i changed for iso
,并提到如果我使用-fpermissive
,代码将被接受。如果我尝试在for循环之外初始化变量,则会产生一大堆错误。
有什么想法吗?
提前致谢。
答案 0 :(得分:3)
不是“for iso”(可能读取整个错误消息...... ),但是对于ISO C ++。问题是i
变量的范围只是for
循环(因为它的定义在循环的初始化中)。因为看起来你想在循环之外使用它,所以声明它是这样的:
int i;
for (i = 0; i < foo; i++) {
// ...
}
do_safe_stuff_with(i); // valid
答案 1 :(得分:2)
当你这样做时。
for (int i=0;i<numEntries;i++)
那么变量i
只是循环的局部变量,你不能在循环之外真正使用它。
如果你想在循环之外使用i
,那么你需要在循环之外声明它:
int i;
for (i=0;i<numEntries;i++)
答案 2 :(得分:1)
i
在for
循环条件子句中声明。它在if
循环后的for
子句中不可见。
尝试:
int i = 0;
for (;i<numEntries;i++)
{
if (strcmp(englishWord[i], s)==0)
break;
}
if (i<numEntries)