2013-02-28 4 views
0

저는 C++에서 시작하고 아직 많은 유형 캐스팅을 다루지 않았습니다. 나는 그 문법이 (type) (variables)이라는 인상하에 있었지만,이 경우에는 작동하지 않는 것으로 보인다.캐스팅/변환 딜레마 유형

float calcSphere (int radius) 
{ 
    float sphereSA; 

    sphereSA = (4 * PI * (radius*radius)); 

    return sphereSA; 

} 

PI 코드의 상단에 #define PI 3.14를 사용하여 선언 된 기호 상수, 나는 (float) (4 * PI * (radius*radius))를 사용하여이 문제를 해결하기 위해 시도했지만이 아무것도 해결되지 않았다. Google은 너무 피상적 인 결과를 반환하는 것처럼 보입니다. 어떤 해결책?

+3

나는 어떤 오류가 발생합니까? – Pubby

+1

구의 표면적. 오류가 발생했습니다 unary ("int"가)의 잘못된 형식 인수입니다. – Scholar

+0

@Revoo 죄송합니다. 나는 함수 이름에 세심한주의를 기울이지 않았다. 변수'radius'를보고있었습니다. 수식이 맞습니다. 나는 당신의 문제가 정확히 무엇인지 확신하지 못한다. 전체 프로그램과 오류 메시지를 게시하십시오. – Mahesh

답변

1

그냥 추측하지만, 당신은 (MSVS를 사용하여) float로 더블 캐스팅 초기화에 대한 경고를 받고있다? 아니면 어쩌면 그것은 엉망으로 만들고있어. 모든 것이 '4'의 정수 b/c로 캐스팅되고 끝나는거야?

그렇다면 숫자를 입력 할 때 두 배가되는 문제가 있습니다. 그러나 당신은 그것을 부동으로 사용하고, 그것을 해결하기 위해 숫자가 무엇이 될 필요가 있습니다. 예 :

sphereSA = ((float) 4 * (float) PI * radius * radius); 

그러나 PI에 대한 몇 가지 유형 정보를 컴파일러에 제공하는 것이 좋습니다. 예 :

namespace MyConstants { 
    const float PI = 3.141; 
} 
sphereSA = ((float) 4 * MyConstants::PI * radius * radius); 
-4

당신은 C 스타일의 캐스트를 사용하고 있습니다. 캐스트 구문은 C++로 변경되었습니다. 당신은이 같은 뭔가를보고 싶어 :

dynamic_cast<something*>(yourthing);