2013-05-09 22 views
1

我有一個字典的下面的代碼。我改變了C++查找ISO

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循環之外的變量,它會生成一整個錯誤。

任何想法?

在此先感謝。

+1

將i的聲明移到for循環的上方。 – Throwback1986 2013-05-09 18:50:24

回答

3

不 「爲異」(也許讀取整個錯誤消息...),但ISO C++。問題是i變量的範圍只是for循環(因爲它的定義在循環的初始化之內)。因爲看起來你想在循環外使用它,所以聲明它如下:

int i; 
for (i = 0; i < foo; i++) { 
    // ... 
} 

do_safe_stuff_with(i); // valid 
2

當你這樣做時,

for (int i=0;i<numEntries;i++) 

那麼變量i是本地環路而已,你不能真正使用它的外循環。

如果你想使用i外循環,那麼你需要聲明它的外循環:

int i; 
for (i=0;i<numEntries;i++) 
1

ifor循環條件子句中聲明。它在for循環後面的if子句中不可見。

嘗試:

int i = 0; 
for (;i<numEntries;i++) 
{ 
    if (strcmp(englishWord[i], s)==0) 
     break; 
} 
if (i<numEntries)