ошибка: поиск имени 'i' изменен для ISO 'для' scoping [-fpermissive]

0

Q. Напишите программу, которая "выдает" из слов, которые вам не нравятся; то есть вы читаете слова, используя 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 {
   }
  }
}  

Я думаю, проблема возникает из-за моего финального цикла, но я не понимаю, что делать.

Вот ошибка, которую я получил:

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]
  • 0
    J в неопределенном, потому что он определен внутри для.
  • 1
    Пожалуйста, обновите заголовок вашего вопроса, потому что он дает нулевое указание на вашу проблему. Обратите внимание, что Stackoverflow не является форумом и функционирует совершенно иначе, чем один. Читайте Как спросить и часто задаваемые вопросы для получения дополнительной информации.
Теги:

2 ответа

9

Проблема в:

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

Здесь вы используете i и j не объявляя их. Предыдущие объявления имеют только область блока, в которой вы объявляете. Либо вы должны их обновить, либо если вы хотите использовать предыдущие значения, объявите их выше первого цикла for.

4

Вы указали переменную i и j в цикле for, поэтому из-за проблемы с областью вы не можете получить доступ к переменным в другом для цикла.

Из того, что я понял, в цикле final 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.

  • 0
    это исправляет ошибки, но не решает проблему!
  • 0
    @ user3704747 было бы лучше, если бы ты рассказал, в чем твоя проблема, я был бы очень рад помочь тебе

Ещё вопросы

Сообщество Overcoder
Наверх
Меню