2012-10-23 2 views
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; 

} 
+9

'-fpermissive'를 사용하면 안됩니다. 대신 코드에서 오류를 수정해야합니다. –

+1

왜 코드를 고치는 대신'-fpermissive'를 사용하고 싶습니까? –

+3

'-fpermissive'를 사용했다하더라도, 코드는 여러분이 원하는대로하지 않을 것입니다. – hvd

답변

4

당신은 아래에 더 컴파일러 플래그를 추가 할 수 있습니다 "Other Options" 내가 먼저 코드를 수정해야한다고 생각하지만

enter image description here

"Compiler"> "Settings"있다. 예를 들어 std::sinstd::cos은 각도가 아닌 라디안을 허용합니다. for 문에 중괄호가 필요합니다.

for(int g =0 ; g <= 360; g++) { 
    //code here. 
} 
+0

특히 라디안 부분에 대해 감사드립니다. 나는 지금까지 그것을 결코 알지 못했다. – ARTHUR

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

( 잘못이다 sincos 사용 라디안이 아니라도 있기 때문에 -하지만 연습으로 그 문제를 떠날거야.)