Сообщение об ошибке: поиск имени «jj» изменен для ISO, для «scoping» (если вы используете «-fpermissive», G ++ примет ваш код) - PullRequest
9 голосов
/ 02 июля 2011

Ошибка:

In function ‘int returnShortestWeightedBranch(std::vector<route, std::allocator<route> >*)’:
error: name lookup of ‘jj’ changed for ISO ‘for’ scoping
note: (if you use ‘-fpermissive’ G++ will accept your code)

Код:

for (int i = 0; i< routeVector.size(); i++)
        {
            if (routeVector[i].exitPoint == exitPointDetailsVector[preserveL].exitPoint)
            {
                cout << "\n-----------parent: " << routeVector[i].exitPoint;
                branch obj;
                obj.connectedExitPoint = exitPointDetailsVector[preserveI].exitPoint;
                routeVector[i].selectedBranchesVector.push_back (obj);

                for (int jj = 0; jj < routeVector[i].selectedBranchesVector.size(); jj++);
                {
                    cout << "\n-----------branch: " << routeVector[i].selectedBranchesVector[jj].connectedExitPoint;
                }
            }
        }

В чем здесь проблема?

РЕДАКТ. 1:

Я изменил следующее:

for (int jj = 0; jj < routeVector[i].selectedBranchesVector.size(); jj++);

на:

int jj;
for (jj = 0; jj < routeVector[i].selectedBranchesVector.size(); jj++);

и теперь работает !!Я не понимаю ПРИЧИН.

Ответы [ 4 ]

22 голосов
/ 02 июля 2011

У вас есть точка с запятой в конце внутреннего для утверждения. На этом область действия jj заканчивается, поэтому она не видна внутри блока.

Редактировать
Вы решили проблему с областью видимости, но по-прежнему выполняете цикл for только

<nothing>;

Удалите точку с запятой после скобок!

4 голосов
/ 02 июля 2011
for (int jj = 0; jj < routeVector[i].selectedBranchesVector.size(); jj++);

Эта строка заканчивается точкой с запятой! Это не должно:)

3 голосов
/ 04 сентября 2013

Некоторые компиляторы могут не принять использование переменной 'jj' после завершения цикла for. Поскольку переменная объявлена ​​внутри цикла for, она уничтожается сразу после выполнения. Таким образом, когда вы объявляете переменную итерации вне цикла for, она остается там для дальнейшего использования.

На самом деле это не так, и поэтому вы можете заставить компилятор игнорировать ошибку, добавив '-fpermissive'.

0 голосов
/ 27 января 2016

False: for(...;...;...;);

True: for(...;...;...;)

Не следует использовать точку с запятой, ;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...