错误:对于'范围'[-fpermissive],'''的名称查找已更改为ISO'

时间:2014-06-09 09:25:07

标签: c++

Q值。写一个程序,“ble”你不喜欢的单词;也就是说,你用cin阅读单词并在cout上再次打印它们。如果一个单词是你定义的几个单词之一,你就会写出BLEEP而不是那个单词。 (stroustrup的c ++书)

这是我写的代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
inline void keep_window_open() { char ch; cin >> ch; }
int main() 
{
  vector<string> disliked;
  disliked.push_back("Broccoli");
  disliked.push_back("Carrots");
  disliked.push_back("Tomatoes");
  disliked.push_back("Asparagus");

  vector<string> words;
  string word;
  while (cin >> word) {
    words.push_back(word);
  }
  for (int i = 0; i < words.size(); ++i) {
    cout << words[i] << "\t";     //i used it to see if the program was working
    }
  for (int j = 0; j < disliked.size(); ++j) {
    cout << disliked[j] << "\t";
  }
  for (i = 0; i < j; ++i) {
     if (words[i] == disliked[j]) {
   cout << "BLEEP";
   }
   else {
   }
  }
}  

我认为问题是由于我的最终for循环而产生的,但我不明白该做什么。

这是我得到的错误:

bleep.cpp: In function ‘int main()’:
bleep.cpp:27:8: error: name lookup of ‘i’ changed for ISO ‘for’ scoping [-fpermissive]
bleep.cpp:27:8: note: (if you use ‘-fpermissive’ G++ will accept your code)
bleep.cpp:27:19: error: name lookup of ‘j’ changed for ISO ‘for’ scoping [-fpermissive]

2 个答案:

答案 0 :(得分:10)

问题是:

for (i = 0; i < j; ++i) {
 if (words[i] == disliked[j]) {
  cout << "BLEEP";
 }
 else {
 }
}

此处您使用ij而未声明它们。以前的声明只包含您声明的块范围。您必须重新声明它们,或者如果您想使用以前的值,请将它们声明在第一个for循环之上。

答案 1 :(得分:4)

您已在for循环中声明变量 i j ,因此由于范围问题,您无法访问另一个for循环中的变量。

根据我的理解,在最终for循环中,您要检查 words 数组中的每个单词是否等于 disliked 数组中的单词之一。为此,您需要使用两个for循环,如下所示:

for(int i=0; i<words.size(); i++){
    for(int j=0; j<disliked.size(); j++){
         if(words[i] == disliked[j]){
              words[i] = "BLEEP";     //This step replaces the disliked word with "BLEEP"
           }
    }
}

注意:如果在循环中使用它们之前声明int i,j;,则不需要在任何for循环中再次声明它们。