web-dev-qa-db-ja.com

エラーメッセージ:「jj」の名前ルックアップがISO「for」スコープ用に変更されました(「-fpermissive」を使用する場合、G ++はコードを受け入れます)

エラーは次のとおりです。

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++);

そして今、それは働いています!理由がわかりません。

9
Aquarius_Girl

内側のforステートメントの最後にセミコロンがあります。これでjjのスコープが終了するため、ブロック内には表示されません。

編集
スコープの問題は解決しましたが、forループは実行されています

<nothing>;

括弧の後のセミコロンを削除してください!

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

この行はセミコロンで終わります!それはすべきではありません:)

4

一部のコンパイラは、forループが終了した後、変数 'jj'の使用を受け入れない場合があります。変数はforループ内で宣言されているため、実行直後に破棄されます。したがって、forループの外側で反復変数を宣言すると、さらに使用するためにそこに残ります。

実際にはそのようには機能しません。そのため、「-fpermissive」を追加することで、コンパイラにエラーを無視させることができます。

3
Matheus Z

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

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

セミコロンは使用しないでください、;

0
Emre q