代码块中的-fpermissive选项。我在哪里放置“-fpermissive”选项?

时间:2012-10-23 05:30:24

标签: c++ codeblocks

#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;

}

2 个答案:

答案 0 :(得分:5)

您可以在"Other Options"&gt;中的"Settings"下添加更多编译器标记。 "Compiler"

enter image description here

虽然我认为你应该先修复你的代码。例如,std::sinstd::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;
}

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