1
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <math.h>

このコードについて助けが必要です。コンパイラは -fpermissive オプションを使用するように求め続けますが、どこに入力すればよいかわかりません。以下のコードと表示されているエラーを貼り付けました。

using namespace std;

int cx = 0, cy = 0;

double x =0, y=0,  r = 5;


int main(){

ofstream myfile;

myfile.open("dingo.txt");

for(int g =0 ; g <= 360; g++)

//find x and y

//Get points of a circle.

x = cx + r * cos(g);

y = cy + r * sin(g);

//This is what pops up below:

//In function int main()':

//Error: name lookup of 'g' changed for ISO 'for' scoping [-fpermissive]

//note: (if you use '-fpermissive' G++ will accept your code)

//where should I enter the required option?

myfile << "X: " << x << "; Y: " << y <<endl;

myfile.close();

return 0;

}
4

2 に答える 2

5

>の下"Other Options"にさらにコンパイラフラグを追加できます"Settings""Compiler"

ここに画像の説明を入力

最初にコードを修正する必要があると思いますが。たとえば、度ではなくラジアンstd::sinを受け入れます。ステートメントをstd::cos囲む中括弧も必要です。for

for(int g =0 ; g <= 360; g++) {
    //code here.
}
于 2012-10-23T05:37:11.123 に答える
1

使用しないでください-fpermissive

それは「私は本当に、ここで何をしているのかを本当に知っているので、黙ってください」という意味であり、決して良い初心者の選択肢ではありません。

この場合、「g ++はコードを受け入れます」は、「g ++はコードについて文句を言わないが、バグはまだ存在し、コードが警告なしにコンパイルされるため、バグを探すのに多くの時間を浪費する」ことを意味します。 。

コードを適切にインデントすると、問題が明らかになります。

int main(){
    int cx = 0, cy = 0;
    double x = 0, y = 0, r = 5;
    ofstream myfile;
    myfile.open("dingo.txt");
    for(int g = 0 ; g <= 360; g++)
        x = cx + r * cos(g);
    y = cy + r * sin(g);  // <--- Here it is.
    myfile << "X: " << x << "; Y: " << y <<endl;
    myfile.close();
    return 0;
}

g示された行がループ変数であるを使用していることは明らかです。
昔は、for-loopで宣言された変数のスコープは、実際にはループを囲むスコープ(mainあなたの場合は関数)でした。
これは後で変更されたため、ループ変数のスコープはループの内側に限定されますが、古いルールに依存するレガシーコードが多数あるため、コンパイラーは廃止された動作を有効にする方法を提供します。

あなたが意図したのはおそらくこれでした:

for(int g = 0; g <= 360; g++)
{
    x = cx + r * cos(g);
    y = cy + r * sin(g);
    myfile << "X: " << x << "; Y: " << y <<endl;
}

(これ間違っています。度ではなくラジアン sinを使用しているためですが、その問題は演習として残しておきます。)cos

于 2012-10-23T08:41:31.613 に答える