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,这是循环变量。
在过去,在 -loop 中声明的变量for的范围实际上是封闭循环的范围(main在您的情况下是函数)。
这后来被更改,因此循环变量的范围仅限于循环内部,但由于有很多遗留代码依赖于旧规则,编译器提供了一种启用过时行为的方法。

你的意图可能是这样的:

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

(这也是错误的,因为使用弧度,sincos不是度数 - 但我将把这个问题留作练习。)

于 2012-10-23T08:41:31.613 回答