2010-01-23 5 views
0

main() 부분의 입력 번호에서 읽은 다음 다른 bool 함수에서 계산해야하는 프로그램을 작성해야합니다. 매번 호출 할 때마다 함수의 숫자와 모든 다른 매개 변수의 전체 배열을 삽입하고 싶지 않습니다.C++의 전역 변수

내 질문은 : 어떻게 든 C++에서 일부 변수의 입력을 읽을 수 있지만 main() 외부의 다른 함수도이 변수를 "알"며 그 안에 무엇이 들어 있는지 알려줄 수 있습니까? 함수를 호출 할 때 많은 인수를해야합니까? 이러한 난 다른 기능 (I 그들을 사용하기 때문에 볼 수해야 VARS있다 - [25] < B

#include <iostream> 
using namespace std; 

inline bool del(int n) 
{ 
    int i; 
    for(i=0;i<s1;i++) 
    { 
     if((n % a[i]) == 0) return true; 
    } 
    return false; 
} 
inline bool ned(int n) 
{ 
    int i; 
    for(i=0;i<s2;i++) 
    { 
     if((n % b[i]) != 0) return true; 
    } 
    return false; 
} 
int main(void) 
{ 
    int s1, s2, a[25], b[25]; 
     int m, n, i, k=0; 
    bool d, nd; 
    cin >> s1 >> s2 >> m >> n; 
    for(i=0;i<s1;i++) 
     cin >> a[i]; 
    for(i=0;i<s2;i++) 
     cin >> b[i]; 
    for(i=m;i<=n;i++) 
    { 
     d = del(i); 
     nd = ned(i); 
     if(d == true && nd == true) ++k; 
    } 
    cout << k << endl; 
    return 0; 
} 

INT의 S1, S2, A [25] :

는 코드 당신이 볼 수있는 것처럼).

전역처럼 선언하려고했지만 작동하지 않아 "이 범위에서 선언되지 않았습니다"와 같은 오류가 발생했습니다.

도움 주셔서 감사합니다.

답변

3

변수를 글로벌하게 만드는 것은 나쁜 습관입니다. 배열을 함수에 전달하거나 객체 전체를 객체로 만들고 클래스의 배열과 함수 멤버를 만듭니다. 이것이 OOP에 관한 것입니다.

+0

조언 해 주셔서 감사합니다. – ggg

+0

객체는 main 호출에서 obj.readInput()이라는 함수를 호출하는 방법이며 "main()"의 입력 번호를 읽는 대신 "012"를 사용합니다. – Patrick

-1

당신의 선언이 전역이 아닌 [25]와 b [25]의 선언을 옮기기 만하면됩니다.

+1

엄밀히 말하면 정답이지만 실제로는 좋지 않습니다 조언... – dmckee

0

당신이 찾고있는 것은 변수를 전역 범위에 넣는 것입니다. 당신은, 내가 세계를 선언 한보고 델에서 사용할 수있는 것처럼

#include <iostream> 
using namespace std; 

    int s1, s2, a[25], b[25]; 

inline bool del(int n) 
{ 
int x = s1 + s2; 
    int i; 
    for(i=0;i<s1;i++) 
    { 
     if((n % a[i]) == 0) return true; 
    } 
    return false; 
} 
inline bool ned(int n) 
{ 
    int i; 
    for(i=0;i<s2;i++) 
    { 
     if((n % b[i]) != 0) return true; 
    } 
    return false; 
} 
int main(void) 
{ 
     int m, n, i, k=0; 
    bool d, nd; 
    cin >> s1 >> s2 >> m >> n; 
    for(i=0;i<s1;i++) 
     cin >> a[i]; 
    for(i=0;i<s2;i++) 
     cin >> b[i]; 
    for(i=m;i<=n;i++) 
    { 
     d = del(i); 
     nd = ned(i); 
     if(d == true && nd == true) ++k; 
    } 
    cout << k << endl; 
    return 0; 
} 

() : 난 당신이 오류 잘 다음 작품 때문에 "이 범위에서 선언하지"에 대해 무슨 뜻인지 모르는 .

그러나 이것은 나쁜 관행이며 OOP w/structs 또는 클래스를 사용하여 데이터를 전달하고 구성해야합니다.