#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;
}
答案 0 :(得分:5)
您可以在"Other Options"
&gt;中的"Settings"
下添加更多编译器标记。 "Compiler"
虽然我认为你应该先修复你的代码。例如,std::sin
和std::cos
接受弧度,而不是度数。您还需要围绕for
声明提供大括号。
for(int g =0 ; g <= 360; g++) {
//code here.
}
答案 1 :(得分:1)
不要使用-fpermissive
。
这意味着“我真的,真的知道我在这里做了什么,所以请闭嘴”,这绝不是一个好的初学者选择。
在这种情况下,“g ++将接受你的代码”意味着“g ++不会抱怨你的代码,但是bug仍然存在,你将浪费很多时间来寻找它们,因为代码编译时没有那么多警告“。
正确缩进代码会暴露问题:
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
- 循环中声明的变量的范围实际上是包围循环的范围(在您的情况下为main
函数)。
这后来改变了,所以循环变量的范围仅限于循环的 inside ,但由于有很多遗留代码依赖于旧规则,编译器提供了一种启用过时的行为。
你的意图可能就是:
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
使用的是弧度,而不是度数 - 但我会把这个问题留作练习。)